Laravel 预加载查询问题
Laravel eager loading Query issue
我在以下查询中遇到问题。查询 return 的结果在 eager 函数内没有 运行 条件。
虽然我们已经为 $from_code 和 $to_code 赋值,但它不会附加这些内部条件。它只是 return empperson table 中的所有数据,而不管分配的值 $from_code 和 $to_code .
$empPersons = Empperson::with(['empmaster' => function($query) use ($from_code,$to_code){
if($from_code !=""){
$query->where('empmaster.empCode','>=',$from_code);
}
if($to_code !=""){
$query->where('empmaster.empCode','<=',$to_code);
}
}]);
我的Empmaster和Empperson模型如下。
Empmaster.php
class Empmaster extends Model
{
protected $table = 'empmaster';
public function empPerson()
{
return $this->hasOne('App\Empperson');
}
}
Empperson.php
class Empperson extends Model
{
protected $table = 'empperson';
public function empMaster()
{
return $this->belongsTo('App\Empmaster','empmaster_id','id');
}
}
因此,据我了解,您想用存在于这些条件下的关系来调节 Empperson
结果。那么你需要使用whereHas
,而不是with
$empPersons = Empperson::whereHas('empmaster', function($query) use ($from_code,$to_code){
if($from_code !=""){
$query->where('empCode','>=',$from_code);
}
if($to_code !=""){
$query->where('empCode','<=',$to_code);
}
})->get();
with
只会 运行 条件 empmaster
结果。如果结果中仍然需要 empmaster
关系,则可以将两者结合起来。
$empPersons = Empperson::whereHas('empmaster', function($query) use ($from_code,$to_code){
if($from_code !=""){
$query->where('empCode','>=',$from_code);
}
if($to_code !=""){
$query->where('empCode','<=',$to_code);
}
})->with(['empmaster' => function($query) use ($from_code,$to_code){
if($from_code !=""){
$query->where('empCode','>=',$from_code);
}
if($to_code !=""){
$query->where('empCode','<=',$to_code);
}
}])->get();
所以实际上你可以设置条件 Empperson
并得到他们所有的 Empmaster
而不管条件如何。
我在以下查询中遇到问题。查询 return 的结果在 eager 函数内没有 运行 条件。 虽然我们已经为 $from_code 和 $to_code 赋值,但它不会附加这些内部条件。它只是 return empperson table 中的所有数据,而不管分配的值 $from_code 和 $to_code .
$empPersons = Empperson::with(['empmaster' => function($query) use ($from_code,$to_code){
if($from_code !=""){
$query->where('empmaster.empCode','>=',$from_code);
}
if($to_code !=""){
$query->where('empmaster.empCode','<=',$to_code);
}
}]);
我的Empmaster和Empperson模型如下。
Empmaster.php
class Empmaster extends Model
{
protected $table = 'empmaster';
public function empPerson()
{
return $this->hasOne('App\Empperson');
}
}
Empperson.php
class Empperson extends Model
{
protected $table = 'empperson';
public function empMaster()
{
return $this->belongsTo('App\Empmaster','empmaster_id','id');
}
}
因此,据我了解,您想用存在于这些条件下的关系来调节 Empperson
结果。那么你需要使用whereHas
,而不是with
$empPersons = Empperson::whereHas('empmaster', function($query) use ($from_code,$to_code){
if($from_code !=""){
$query->where('empCode','>=',$from_code);
}
if($to_code !=""){
$query->where('empCode','<=',$to_code);
}
})->get();
with
只会 运行 条件 empmaster
结果。如果结果中仍然需要 empmaster
关系,则可以将两者结合起来。
$empPersons = Empperson::whereHas('empmaster', function($query) use ($from_code,$to_code){
if($from_code !=""){
$query->where('empCode','>=',$from_code);
}
if($to_code !=""){
$query->where('empCode','<=',$to_code);
}
})->with(['empmaster' => function($query) use ($from_code,$to_code){
if($from_code !=""){
$query->where('empCode','>=',$from_code);
}
if($to_code !=""){
$query->where('empCode','<=',$to_code);
}
}])->get();
所以实际上你可以设置条件 Empperson
并得到他们所有的 Empmaster
而不管条件如何。