gpt4 book ai didi

laravel - Laravel 4-如何使用关系列所在的条件

转载 作者:行者123 更新时间:2023-12-04 13:32:42 25 4
gpt4 key购买 nike

这就是我想要的,我有两个表。一个是“餐厅”,另一个是“设施”。

这些表很简单..和一对一关系。例如,有一个带有idnameslug等的餐厅表,另一个名为facilities的表具有idrestaurant_idwifiparking

这是我的模型:

class Restaurant extends Eloquent {

protected $table = 'restaurants';

public function facilities() {
return $this->hasOne('Facilities');
}
}

class Facilities extends Eloquent {

protected $table = 'facilities';

public function restaurant() {
return $this->belongsTo('Restaurant');
}


}

我想做这个 Select * from restaurants r left join facilities rf on r.id=rf.restaurant_id where r.name = 'bbq' and rf.wifi != '1'

如何使用Eloquent做到这一点?

ps。很抱歉从 https://stackoverflow.com/questions/14621943/laravel-how-to-use-where-conditions-for-relations-column#=进行修改,但是我有类似的问题。

最佳答案

您可以在关系对象上使用where和其他基于sql的方法。

这意味着您可以在模型中创建自定义方法:

class Restaurant extends Eloquent {

protected $table = 'restaurants';

public function facilities($wifi) {
return $this->belongsTo('Facility')->where('wifi', '=', $wifi);
}
}

或者,您可以尝试使用 query scopes:
class Restaurant extends Eloquent {

protected $table = 'restaurants';

public function facility() {
return $this->belongsTo('Restaurant');
}

public function scopeFiltered($query, $wifi)
{
return $query->where('wifi', '>', 100);
}
}

然后:
$wifi = 1;
$restaurants = Restaurant::facilities()->filtered($wifi)->get();

这可能并不是您真正需要的,但是查询范围很可能是您想要用来获取所尝试内容的范围。

关键是要知道关系类可以像查询构建器一样使用-例如:
$this->belongsTo('Facility')->where('wifi', '=', $wifi)->orderBy('whatever', 'asc')->get();

关于laravel - Laravel 4-如何使用关系列所在的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18885127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com