【问题标题】:Eloquent query results limited by relation criteria受关系条件限制的 Eloquent 查询结果
【发布时间】:2015-02-19 11:40:59
【问题描述】:

我有两张表,附属公司和会议,我想构建 Eloquent 查询,它将列出所有附属公司,而没有那些在指定日期和时间指定会议的附属公司。因此,结果应包含所有未开会的关联公司,以及已开会但未在指定日期和时间开会的关联公司。

用户:id、姓名、城市...

会议:id、客户、日期、时间、user_id...

可以在没有连接或原始 sql(whereRaw 或 DB::raw)的情况下完成吗?如何?

测试数据用户:

array:3 [▼
  0 => array:5 [▼
    "id" => 2
    "name" => "John"
    "city" => "New York"
    "created_at" => "2015-02-19 00:26:43"
    "updated_at" => "2015-02-19 00:34:03"
  ]
  1 => array:5 [▼
    "id" => 3
    "name" => "Elisabeth"
    "city" => "Kansas City"
    "created_at" => "2015-02-19 00:26:43"
    "updated_at" => "2015-02-19 00:26:43"
  ]
  2 => array:5 [▼
    "id" => 4
    "name" => "Teodora"
    "city" => "New York"
    "created_at" => "-0001-11-30 00:00:00"
    "updated_at" => "-0001-11-30 00:00:00"
  ]
]

测试数据会议:

array:3 [▼
  0 => array:8 [▼
    "id" => 1
    "client" => "George P."
    "date" => "2015-05-15"
    "time" => "14:00:00"
    "approved" => 1
    "user_id" => 2
    "created_at" => "2015-02-19 00:26:43"
    "updated_at" => "2015-02-19 00:26:43"
  ]
  1 => array:8 [▼
    "id" => 2
    "client" => "Jack White"
    "date" => "2015-05-15"
    "time" => "12:00:00"
    "approved" => 1
    "user_id" => 2
    "created_at" => "2015-02-19 00:26:43"
    "updated_at" => "2015-02-19 00:26:43"
  ]
  2 => array:8 [▼
    "id" => 3
    "client" => "Philip B."
    "date" => "2015-05-16"
    "time" => "16:00:00"
    "approved" => 1
    "user_id" => 3
    "created_at" => "2015-02-19 00:26:43"
    "updated_at" => "2015-02-19 00:26:43"
  ]
]

2015-05-15 12:00 未开会的所有用户的预期结果

array:2 [▼
  0 => array:5 [▼
    "id" => 3
    "name" => "Elisabeth"
    "city" => "Kansas City"
    "created_at" => "2015-02-19 00:26:43"
    "updated_at" => "2015-02-19 00:26:43"
  ]
  1 => array:5 [▼
    "id" => 4
    "name" => "Teodora"
    "city" => "New York"
    "created_at" => "-0001-11-30 00:00:00"
    "updated_at" => "-0001-11-30 00:00:00"
  ]
]

任何帮助表示赞赏。

【问题讨论】:

  • 不加入是的。原始 sql 是什么意思?
  • 怎么样? (: 我的意思是 whereRaw 或 DB::raw
  • 能否将测试数据和预期输出添加到问题中?
  • 基本上你的意思是 Model::whereNotExists() ?类似:stackoverflow.com/questions/22409469/laravel-4-where-not-exists?
  • 这不会排除所有被指定参加会议的用户,无论会议何时举行?

标签: mysql sql laravel eloquent


【解决方案1】:

假设你的用户模型有一个关系 meetings 你可以这样做:

$users = User::whereDoesntHave('meetings', function($q){
    $q->where('time', '12:00:00');
})->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2019-12-05
    • 1970-01-01
    • 2021-06-10
    相关资源
    最近更新 更多