Laravel 中的预加载 return 空值
Eager Loading return null in Laravel
我有预加载问题
我有两个模型:
class Provider extends Model
{
/**
* Get the currency record associated with the provider.
*/
public function currency()
{
return $this->hasOne('App\Currency', 'tabcur', 'poucur')->where('tabcol','$DEV');
}
class Currency extends Model
{
/**
* Get the providers record associated with the currency.
*/
public function provider()
{
return $this->belongsTo('App\Provider', 'tabcur', 'poucur');
}
当我尝试这个时:
Provider::first()->currency
有效
但是,如果我尝试这个:
Provider::with('currency')->first()
字段货币为空
currency: null,
谁能帮帮我?
编辑 1
我试过了
>>> DB::connection()->enableQueryLog()
>>> App\Provider::with('currency')->first()
>>> DB::getQueryLog()
我有这个 App\Provider::with('currency')->first()
[
[
"query" => "select * from PROVIDER FETCH FIRST 1 ROWS ONLY",
"bindings" => [],
"time" => 18.74,
],
[
"query" => "select * from CURRENCY where tabcol = ? and CURRENCY.tabcur in (?)",
"bindings" => [
"$DEV",
" ",
],
"time" => 33.94,
],
]
但它是钢铁“空”
Provider::first()->currency
会 return 一个 Currency::class
Provider::with('currency')->first()
将 return Provider::class 与 关系中的 Currency::class[ ]
我看不出您的代码无法运行的任何原因。
first()
所做的是:
The first
method returns the first element in the collection that passes a given truth test.
所以当 Eager loading test 通过时,它 returns >>First Record<< 与关系已加载。
但是
您的关系 currency
返回空,因为您的货币关系中的 where
条件未通过,因此它将显示该关系已加载 with
但它不会'没有显示任何记录,因为它没有通过 where
.
这是因为满足with
条件的第一条记录没有通过where条件,尝试去掉where
然后重新加载关系,看看[=的值是多少18=],然后再做一次,但这次使用 where
,但输入你为返回的记录找到的值,它应该可以工作。
我有预加载问题
我有两个模型:
class Provider extends Model
{
/**
* Get the currency record associated with the provider.
*/
public function currency()
{
return $this->hasOne('App\Currency', 'tabcur', 'poucur')->where('tabcol','$DEV');
}
class Currency extends Model
{
/**
* Get the providers record associated with the currency.
*/
public function provider()
{
return $this->belongsTo('App\Provider', 'tabcur', 'poucur');
}
当我尝试这个时:
Provider::first()->currency
有效
但是,如果我尝试这个:
Provider::with('currency')->first()
字段货币为空
currency: null,
谁能帮帮我?
编辑 1
我试过了
>>> DB::connection()->enableQueryLog()
>>> App\Provider::with('currency')->first()
>>> DB::getQueryLog()
我有这个 App\Provider::with('currency')->first()
[
[
"query" => "select * from PROVIDER FETCH FIRST 1 ROWS ONLY",
"bindings" => [],
"time" => 18.74,
],
[
"query" => "select * from CURRENCY where tabcol = ? and CURRENCY.tabcur in (?)",
"bindings" => [
"$DEV",
" ",
],
"time" => 33.94,
],
]
但它是钢铁“空”
Provider::first()->currency
会 return 一个 Currency::class
Provider::with('currency')->first()
将 return Provider::class 与 关系中的 Currency::class[ ]
我看不出您的代码无法运行的任何原因。
first()
所做的是:
The
first
method returns the first element in the collection that passes a given truth test.
所以当 Eager loading test 通过时,它 returns >>First Record<< 与关系已加载。
但是
您的关系 currency
返回空,因为您的货币关系中的 where
条件未通过,因此它将显示该关系已加载 with
但它不会'没有显示任何记录,因为它没有通过 where
.
这是因为满足with
条件的第一条记录没有通过where条件,尝试去掉where
然后重新加载关系,看看[=的值是多少18=],然后再做一次,但这次使用 where
,但输入你为返回的记录找到的值,它应该可以工作。