Laravel Eloquent ORM 过滤关系
Laravel Eloquent ORM filtering with relationship
我正在做一个过滤器,有一个问题我无法解决。过滤器使用关系,它是完美的。但是当我对 table 中不存在的属性进行筛选时,它不起作用。因为问题太复杂我给你一个示例代码:
<?php
class School extends Eloquent {
protected $table = 'schools';
public function city(){
return $this->belongsTo('City');
}
public function municipality(){
return $this->belongsTo('Municipality');
}
public function listSchoolsEndUser()
{
$schools_data = new School;
if ( Input::has('district') ) {
$schools_data = $schools_data->whereHas('city', function($q){
$q->where('district_id', '=', Input::get('district'));
});
}
if ( Input::has('municipality') ) {
$schools_data = $schools_data->whereHas('city', function($q){
$q->where('municipality_id', '=', Input::get('municipality'));
});
}
if ( Input::has('city') ) {
$schools_data = $schools_data->where('city_id', '=', Input::get('city'));
}
$schools_data = $schools_data->paginate(12);
return $schools_data;
}
}
错误是:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'district_id' in 'where clause' (SQL: select count(*) as aggregate from `schools` where (`specialties` like %"5"%) and (select count(*) from `cities` where `schools`.`city_id` = `cities`.`id` and `district_id` = 5) >= 1)
示例 table 结构为:
Schools table:
|---------------|
|id|name|city_id|
|---------------|
Cities table:
|-----------------------|
|id|name|municipality_id|
|-----------------------|
Municipalities table:
|-------------------|
|id|name|district_id|
|-------------------|
Districts table:
|-------|
|id|name|
|-------|
因为 district_id
是两个关系,所以您需要使用点语法来定位嵌套关系:
if ( Input::has('district') ) {
$schools_data = $schools_data->whereHas('city.municipality', function($q){
$q->where('district_id', '=', Input::get('district'));
});
}
(假设您的 City
模型中有一个 municipality()
关系)
我正在做一个过滤器,有一个问题我无法解决。过滤器使用关系,它是完美的。但是当我对 table 中不存在的属性进行筛选时,它不起作用。因为问题太复杂我给你一个示例代码:
<?php
class School extends Eloquent {
protected $table = 'schools';
public function city(){
return $this->belongsTo('City');
}
public function municipality(){
return $this->belongsTo('Municipality');
}
public function listSchoolsEndUser()
{
$schools_data = new School;
if ( Input::has('district') ) {
$schools_data = $schools_data->whereHas('city', function($q){
$q->where('district_id', '=', Input::get('district'));
});
}
if ( Input::has('municipality') ) {
$schools_data = $schools_data->whereHas('city', function($q){
$q->where('municipality_id', '=', Input::get('municipality'));
});
}
if ( Input::has('city') ) {
$schools_data = $schools_data->where('city_id', '=', Input::get('city'));
}
$schools_data = $schools_data->paginate(12);
return $schools_data;
}
}
错误是:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'district_id' in 'where clause' (SQL: select count(*) as aggregate from `schools` where (`specialties` like %"5"%) and (select count(*) from `cities` where `schools`.`city_id` = `cities`.`id` and `district_id` = 5) >= 1)
示例 table 结构为:
Schools table:
|---------------|
|id|name|city_id|
|---------------|
Cities table:
|-----------------------|
|id|name|municipality_id|
|-----------------------|
Municipalities table:
|-------------------|
|id|name|district_id|
|-------------------|
Districts table:
|-------|
|id|name|
|-------|
因为 district_id
是两个关系,所以您需要使用点语法来定位嵌套关系:
if ( Input::has('district') ) {
$schools_data = $schools_data->whereHas('city.municipality', function($q){
$q->where('district_id', '=', Input::get('district'));
});
}
(假设您的 City
模型中有一个 municipality()
关系)