如何获得没有关系的模型记录?

时间:2016-01-14 07:04:05

标签: laravel eloquent

Laravel中是否有'whereDoesNotHave'方法来获取没有关系的记录?

我有一个查询,检查用户是否有团队,或者他们的名字是David,但只是不知道如何编写此查询:

User::where(function($query){ 
     $query->where('name', 'David')->orWhere($this->teams->count() , '<' , 1);
})
  ->get();

我需要这样的东西。

更新

忘了提 - 关系是多对多的,用户可以拥有多个团队

2 个答案:

答案 0 :(得分:2)

在您的用户模型中,您可能与团队模型有关系 //在用户模型中 公共职能队() {     返回$ this-&gt; belongsTo('App \ Team','team_id'); } 这将是逻辑上将用户与团队相关联的默认方式。 如果是这种情况,则表示您在users表中有一个team_id字段。 因此,您唯一需要做的就是查找具有null team_id字段的用户。 那就是; $ q = User :: where('team_id',null) - &gt; orWhere('name','David') - &gt; get(); 编辑: 如果你的关系是多对多(每个用户可能属于多个团队),你应该使用Eloquent的has()方法; $ users = User :: has('teams','0') - &gt; orWhere('name','David') - &gt; get(); 注意: 正如帕特里克斯在他的回答中指出的那样 使用Eloquent方法,doesHave()也可以工作,在这种情况下似乎更合适。

答案 1 :(得分:0)

您可以使用doesntHave()方法:

$users = User::doesntHave('teams')->orWhere('name', 'David')->get();

如果您需要&#34;或&#34;它,第二个参数让你改变它:

$users = User::where('name', 'David')->doesntHave('teams', 'or')->get();