sql – Laravel Eloquent ORM“whereHas”通过表
|
嘿,我和Laravel有问题.我尝试通过联系表选择有我选择的城市的地方. 我的模型类: class Places extends Eloquent {
public function contacts()
{
return $this->hasOne('Contacts');
}
public function clubs()
{
return $this->hasOne('Clubs');
}
}
联系人类: class Contacts extends Eloquent {
public function cities()
{
return $this->hasOne('Cities');
}
}
城市类: class Cities extends Eloquent {
}
我的查询: $view->clubs = Places::whereHas('contacts',function ($q) use($city_id){
$q->where('contacts',function ($q) use($city_id){
$q->where('id',$city_id);
});
})->get();
错误消息:
我知道它缺少“来自”citites,但我不知道如何实现它. 解决方法您有3个使用关系的选项:1最直接的解决方案: Places::whereHas('contacts',function ($q) use ($city_id){
$q->whereHas('cities',function ($q) use ($city_id){
$q->where('id',$city_id);
});
})->get();
2与上述相同,但使用此PR:https://github.com/laravel/framework/pull/4954 Places::whereHas('contacts.cities',function ($q) use ($city_id){
$q->where('id',$city_id);
})->get();
3使用hasManyThrough关系: // Place model
public function cities()
{
return $this->hasManyThrough('City','Contact');
}
// then
Places::whereHas('cities',function ($q) use ($city_id){
$q->where('cities.id',$city_id);
})->get();
编辑 拥有您的架构显然没有任何建议或您的原始设置可以工作. 这是一个多对多的关系,在Eloquent中属于MajorMany: // Places model
public function cities()
{
return $this->belongsToMany('Cities','contacts','places_id','cities_id')
->withPivot( .. contacts table fields that you need go here.. );
}
// Cities model
public function places()
{
return $this->belongsToMany('Places','cities_id','places_id')
->withPivot( .. contacts table fields that you need go here.. );
}
然后你可以调用这样的关系: $city = Cities::first(); $city->places; // collection of Places models // contacts data for a single city-place pair $city->places->first()->pivot->open_hours; // or whatever you include in withPivot above 现在,还有另一种设置方法,如果您还需要联系人模型本身: // Places model
public function contact()
{
return $this->hasOne('Contacts','places_id');
}
// Contacts model
public function city()
{
return $this->belongsTo('Cities','cities_id');
}
public function place()
{
return $this->belongsTo('Places','places_id');
}
// Cities model
public function contact()
{
return $this->hasOne('Contacts','cities_id');
}
然后: $city = Cities::first(); $city->contact; // Contacts model $city->contact->place; // Places model hasManyThrough在这里根本不起作用 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql – 如何组合来自两个存储过程调用的结果集?
- SQL Server 远程连接服务器详细配置(sp_addlinkedserver)
- mysql中用于数据迁移存储过程分享
- python MySQLdb Windows下安装教程及问题解决方法
- sql – CASCADE Delete是否作为事务执行?
- 深入探寻mysql自增列导致主键重复问题的原因
- sqlserver只有MDF文件恢复数据库的方法
- sql-server-2008 – SQL2008. SSRS webservice的URL是什么?
- .net – 可以从存储过程返回一个varchar(max)吗?
- 如果我切换到原始SQL查询,我的Rails查询开始变得复杂?你是
