Отношения Laravel, кажется, не работают
У меня есть объекты Item и AdvertItem в Laravel. Я хочу создать отношение 1 к 1 между элементом и элементом рекламы
Класс предмета выглядит так
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
//
public function Category(){
return $this->belongsTo(Category::class);
}
public function Currency(){
return $this->hasOne(Currency::class);
}
public function AdvertItem(){
return $this->hasOne(AdvertItems::class);
}
}
и класс AdvertItem выглядит так
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class AdvertItems extends Model
{
protected $guarded = [];
//
public function items(){
return $this->belongsTo(Item::class);
}
}
но когда я вызываю AdvertItem, я вижу только item_id = 1 вместо объекта item.
Таблица предметов создается так
class CreateItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('description');
$table->unsignedBigInteger('currency_lookup_id');
$table->unsignedBigInteger('category_id')->index();
$table->unsignedBigInteger('price');
$table->string("image_path");
$table->string('sale_ind');
$table->Date('eff_from');
$table->Date('eff_to');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('item');
}
}
И таблица объявлений создается вот так
class CreateAdvertItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('advert_items', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('item_id');
$table->unsignedBigInteger('customer_id');
$table->Date('eff_from');
$table->Date('eff_to');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('advert_items');
}
}
Пожалуйста помогите.
1 ответ
Следующие правила помогут вам.
Всегда начинайте имена отношений с нижнего регистра. Сохраняйте заглавные буквы для классов, а не методов.
Модели должны быть единичными
Обратите внимание на множественность имен. Вещи, из которых должно быть только одно, должны быть единичными. Итак, в ваших отношениях 1:1 оба названия отношений должны быть в единственном числе.
AdvertItem класс
public function item(){
return $this->belongsTo(Item::class);
}
тогда, если у вас есть Item и вы хотите AdvertItem, вам следует load
Это
$item->load('advertitem');
или наоборот
$advertItem->load('item');