Эта проблема беспокоила меня в течение многих дней, я не могу решить эту проблему до сих пор, поэтому я должен обратиться за помощью.
Ниже приведен фрагмент кода:
Модель Категория.php
public function child()
{
return $this->hasMany('App\Http\Models\Category', 'pid', 'id');
}
public function logs()
{
return $this->hasMany('App\Http\Models\Log', 'cate_id');
}
public function products()
{
return $this->hasMany('App\Http\Models\Product', 'cate_id');
}
public function newProduct()
{
return $this->products()->orderBy('created_at', 'desc');
}
public function latestLog()
{
return $this->logs()->where([
'product_id' => $this->newProduct()->first()->id,
'status' => 1,
])->orderBy('created_at', 'desc');
}
Контроллер CategoryController.php
public function getLatestLog()
{
// Category with id 1 with nested eager loading
$subCategory = Category::find(1)
->with(['child.newProduct', 'child.latestLog'])
->first()->child;
// Get latest log for subCategory with id 3
dd($subCategory->find(3)->latestLog);
}
В этом случае я хочу использовать вложенную нетерпеливую загрузку, чтобы получить последний журнал. Но меня беспокоит то, что когда я добавляю child.checkLatestLog
, он просто выводит пустой, но когда я его удаляю, он выводит нормально.
Я думаю, что проблема связана с переменной $this->newProduct()->first()->id
. Поскольку я попытался вручную ввести идентификатор продукта, который существует в таблице журнала, он работал нормально.
Это может быть моя вина, но я не знаю, где это было не так. Я хотел бы поблагодарить вас за обращение за помощью.
обновление
Решение этого вопроса:
public function latestLog()
{
return $this->hasManyThrough(
'App\Http\Models\Log',
'App\Http\Models\Product',
'cate_id',
'product_id',
'id',
'id'
)->orderBy('created_at', 'desc');
}