laravel查询构建器中的其他位置

时间:2018-12-04 04:04:44

标签: php laravel query-builder

我已在查询中加入表,但我需要验证该表中列的值,它会返回

 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'on' in 'on clause'

代码

$interests = DB::table('projects')
->where('projects.published', 'y')
->whereDate('projects.created_at', Carbon::now()->subDay())
->join('project_tag', 'project_tag.project_id', '=', 'projects.id') //get project tags


->join('mailings', 'mailings.interests', '=', 'on') //get mailing lists with on value in interests column


->join('users', 'users.id', '=', 'mailings.user_id') //get mailing users
->join('user_interests', 'user_interests.user_id', '=', 'users.id') //get mailing users intrests (same as tags in projects)
->select('projects.*', 'users.*')
->get();

我的问题在这一行

->join('mailings', 'mailings.interests', '=', 'on')

我只想加入mailings列值设置为intrests的{​​{1}}

有什么主意吗?

更新

我将发布行更改为:

on

现在返回结果,但是输出数据重复且不完整。这是我在->join('mailings', function ($join) { $join->where('mailings.interests', '=', 'on'); })

上看到的内容
dd

问题

  1. 为每个用户复制数据
  2. 对于所有用户来说,它都具有相同的项目,但是根据他们的标签而不同。

要明确 lluminate\Support\Collection {#819 #items: array:6 [ 0 => {#824 +"title": "test 1" +"slug": "test-1" +"budget": 23454235.0 +"name": "Diana Bosco" +"email": "arunolfsson@example.net } 1 => {#827 +"title": "test 1" +"slug": "test-1" +"budget": 23454235.0 +"name": "Diana Bosco" +"email": "arunolfsson@example.net } 2 => {#820 +"title": "test 1" +"slug": "test-1" +"budget": 23454235.0 +"name": "admin" +"email": "admin@admin.com" } 3 => {#826 +"title": "test 1" +"slug": "test-1" +"budget": 23454235.0 +"name": "admin" +"email": "admin@admin.com" } 4 => {#823 +"title": "test 1" +"slug": "test-1" +"budget": 23454235.0 +"name": "Aurelia Treutel I" +"email": "korey13@example.net" } 5 => {#825 +"title": "test 1" +"slug": "test-1" +"budget": 23454235.0 +"name": "Aurelia Treutel I" +"email": "korey13@example.net" } ]

  1. 我的用户有标签(我称之为兴趣)
  2. 项目中也有标签
  3. 我想获得与用户兴趣具有相同标签的项目,并将其显示给用户。
  4. 列表项

2 个答案:

答案 0 :(得分:0)

使用'sep 28 2017 abcd'通过FK引用联接->join()表,就像您对其他表所做的一样,然后将mailings子句更改为条件数组:

where

答案 1 :(得分:0)

将过滤器应用为

$interests = DB::table('projects')
            ->where('projects.published', 'y')
            ->whereDate('projects.created_at', Carbon::now()->subDay())
            ->join('project_tag', 'project_tag.project_id', '=', 'projects.id') //get project tags

            // the filter
            ->where('mailings.interests', 'on')

            ->join('users', 'users.id', '=', 'mailings.user_id') //get mailing users
            ->join('user_interests', 'user_interests.user_id', '=', 'users.id') //get mailing users intrests (same as tags in projects)
            ->select('projects.*', 'users.*')
            ->get();