Laravel Relationships(With)

时间:2016-10-22 11:39:29

标签: php laravel eloquent

我对Laravel来说相当新。

我正在尝试使用Laravel的Eloquent查询构建器从我的数据库中提取数据,我可以毫无问题地提取所有数据,但是我想在关系中向第二个表添加一个约束,该约束应该导致no如果数据不正确则返回数据。

然而,当我尝试这个时,我没有返回第二个表数据,但仍然返回初始表数据,在我看来造成了破坏。

这就是我所拥有的:

$accounts = Account::with(array('booking' => function($query)
{
     $query->where('status', '=', 'booked');
}))
->get();

我确保在模型中设置关系,但出于某种原因,我得到这样的回复:

  ["attributes":protected]=>
  array(4) {
    ["booking_id"]=>
    int(1)
    ["account_paid"]=>
    int(1)
    ["created_at"]=>
    string(19) "2016-10-22 11:10:49"
    ["updated_at"]=>
    string(19) "2016-10-22 11:10:49"
  }
  ["original":protected]=>
  array(4) {
    ["booking_id"]=>
    int(1)
    ["account_paid"]=>
    int(1)
    ["created_at"]=>
    string(19) "2016-10-22 11:10:49"
    ["updated_at"]=>
    string(19) "2016-10-22 11:10:49"
  }
  ["relations":protected]=>
  array(1) {
    ["booking"]=>
    NULL
  }

如果预设设置为null,那么如果条件为假,我想要的就是什么都不返回。

2 个答案:

答案 0 :(得分:2)

这应该适合你:

$accounts = Account::with('booking')
    ->whereHas(['booking' => function($q)
    {
        $q->where('status', 'booked');
    }])
    ->get();

答案 1 :(得分:1)

$accounts = Account::with(array('booking' => function($query)
     {
          $query->where('status', '=', 'booked');
      }))
     ->whereHas(array('booking' => function($query)
     {
          $query->where('status', '=', 'booked');
      }))
    ->get();

这是替代方式。