#laravel #eloquent #laravel-blade
#ларавель #красноречивый #ларавель-лезвие
Вопрос:
Я пытаюсь отобразить, какой из атрибутов ( code
) элемента. ServiceItem содержит элемент в качестве внешнего ключа. Но я вообще не могу достать этот Предмет.
Это дает пустой объект в шаблоне лезвия:
@foreach ($service-gt;serviceItems as $serviceItem ) {{ json_encode($serviceItem-gt;item()) }} @endforeach
Вот моя типовая декларация:
//ServiceItem model class ServiceItem extends Model { use HasFactory; public $fillable = ['service_id', 'item_id', 'values']; public function service() { return $this-gt;belongsTo(Service::class, 'foreign_key'); } // this doesn't work public function item() { return $this-gt;belongsTo(Item::class, 'foreign_key'); } } // Service model class Service extends Model { use HasFactory; public $fillable = ['user_id', 'site_id', 'title', 'status', 'remarks', 'report', 'date']; public function user() { return $this-gt;belongsTo('AppModelsUser'); } public function site() { return $this-gt;belongsTo('AppModelsSite'); } public function serviceItems() { return $this-gt;hasMany('AppModelsServiceItem'); } }
Это мой контроллер:
public function index() { $services = Service::latest()-gt;paginate(5); return view('services.index', compact('services')) -gt;with('i', (request()-gt;input('page', 1) - 1) * 5); }
Пожалуйста, помогите мне отобразить code
атрибут в товаре из сервиса!!! Большое спасибо!
Комментарии:
1. вы будете использовать динамическое свойство
$serviceItem-gt;item
, а не метод для доступа к связи; метод вернет объект построителя отношений , а не результат … но динамическое свойство может вернутьсяnull
, так как Принадлежит может вернуть модель илиnull
Ответ №1:
Я полагаю, вы читали документ Laravel об определении отношений моделей. Они ссылались на то, чтобы поместить внешний ключ в качестве второго параметра, не foreign_key
как слово, а как ваш фактический внешний ключ, который ссылается на родительскую таблицу. вы должны изменить код модели.
class ServiceItem extends Model { use HasFactory; public $fillable = ['service_id', 'item_id', 'values']; public function service() { return $this-gt;belongsTo(Service::class, 'service_id'); } public function item() { return $this-gt;belongsTo(Item::class, 'item_id'); } }
и тогда $serviceItem-gt;item
все должно сработать так, как ожидалось.
Комментарии:
1. Спасибо, это работает! Таким образом, вторым параметром функции belongsTo() должно быть имя столбца таблицы, верно?
2. да, это верно.