可以将数组值存储在数据库中并在 Laravel 中使用 where 子句吗?

Posted

技术标签:

【中文标题】可以将数组值存储在数据库中并在 Laravel 中使用 where 子句吗?【英文标题】:It is possible to store array value in database and using with where clause in Laravel? 【发布时间】:2016-08-19 16:04:29 【问题描述】:

我想将数组类型存储在数据库的列中,并使用比较 array($gID) 之间的 n_group_code_id 的位置选择它 如下函数。

CREATE TABLE IF NOT EXISTS `tb_notification` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `n_user_id` int(10) NOT NULL,
  `n_group_code_id` varchar(30) NOT NULL,
  `n_source_id` int(10) NOT NULL,
  `n_activity_type` varchar(100) NOT NULL,
  `n_create_times` datetime NOT NULL,
  `n_description` varchar(160) NOT NULL,
  `n_status` int(2) NOT NULL,
  `url` varchar(200) NOT NULL,
  `updated_at` datetime NOT NULL,
  `created_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=542 ;

--
-- Dumping data for table `tb_notification`
--

INSERT INTO `tb_notification` (`id`, `n_user_id`, `n_group_code_id`, `n_source_id`, `n_activity_type`, `n_create_times`, `n_description`, `n_status`, `url`, `updated_at`, `created_at`) VALUES
(535, 66, '[7,11,11,11]', 1, 'Issue Till', '2016-04-25 07:04:54', 'Issue Till', 0, '0', '2016-04-25 07:59:54', '2016-04-25 07:59:54'),
(536, 66, '[7,11,11,11]', 1, 'Issue Till', '2016-04-25 08:04:47', 'Issue Till', 0, '0', '2016-04-25 08:15:47', '2016-04-25 08:15:47'),
(537, 66, '[7,11,11,11]', 159, 'Transfer till', '2016-04-25 08:04:45', 'Transfer till', 0, '0', '2016-04-25 08:20:45', '2016-04-25 08:20:45'),
(538, 66, '[7,11,11,11]', 160, 'Transfer till', '2016-04-25 09:04:04', 'Transfer till', 0, '0', '2016-04-25 09:06:04', '2016-04-25 09:06:04'),
(539, 66, '[7,11,11,11]', 1, 'Issue Till', '2016-04-26 07:04:29', 'Issue Till', 0, '0', '2016-04-26 07:35:29', '2016-04-26 07:35:29'),
(540, 66, '[7,11,11,11]', 162, 'Issue Till', '2016-04-26 07:04:32', 'Issue Till', 0, '0', '2016-04-26 07:38:32', '2016-04-26 07:38:32'),
(541, 69, '[7,11,11,11]', 163, 'return Till', '2016-04-26 08:04:33', 'return Till', 0, '0', '2016-04-26 08:39:33', '2016-04-26 08:39:33');

这是我的功能:

 public function getNotification($user_id =null, $gId=null)
    
            if(is_array($gId)) 

                $this->_data = self::select('*')
                    ->join('users', 'users.id', '=', 'n_user_id')
                    ->where('users.id','=', $user_id)
                    ->whereIn('n_group_code_id',$gId)
                    ->get();
                if (count($this->_data)) 
                    return $this->_data;
                 else 
                    return false;
                
            else 
                return false;
            

    

【问题讨论】:

这取决于您的数据库的外观。如果在一列中仅使用implode(),则使用foreach() 我插入这样的[7,11,11,11]格式的数据,在mysql或Laravel中可以吗? 是的,有可能。 【参考方案1】:

这是可能的,但我建议您不要重新发明***并在保存之前使用json 输入 DB 和 encode 数组,并在从 DB 加载后使用 decode 它。

首先,将列类型从字符串更改为 json(单击第一个链接以查找所有信息)。

保存数据:

$model = new Model();
....
$model->jsonData = json_encode($array);
$model->save();

要检索数据:

$model = Model::find($id);
$array = json_decode($model->jsonData);

此外,您可以使用 accessors and mutators 自动执行此操作

【讨论】:

所以当我将它作为 Json 插入时,如何使用该数据进行选择 Medzenin 如何使用 where 子句,因为我想用 n_group_code_id 和 $gid 选择 where 看起来像 n_group_code_id(7,11,11) = $gid(7,11,11) @AlexeyMezenin 你能看看我的问题吗 (***.com/questions/38826362/…)

以上是关于可以将数组值存储在数据库中并在 Laravel 中使用 where 子句吗?的主要内容,如果未能解决你的问题,请参考以下文章

将字符串数组存储在类成员函数中并返回

如何将对象类型的值存储在数组中并调用它们(C#)?

将小文件存储在 hdfs 中并在 Nifi Flow 中存档

如何将视图中的数组传递给 ajax 并在 Laravel 5 的控制器中访问?

将一个主题的数据放入回调函数中的动态数组中并进行一些计算

NPM:我们可以将 node_modules 存储到一个公共文件夹中并在 Angular 项目中使用它吗?