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,但输入你为返回的记录找到的值,它应该可以工作。