Как создать CRUD для таблицы PackageItem и получить элемент через ForeignKey в другой таблице? в Laravel

#laravel #laravel-8

Вопрос:

Это моя модель элемента. Я создал функцию arrayPackageItemSelect, которая получает идентификатор и эквивалентна его имени элемента.

 class Item extends Model
{
    use HasFactory;

    protected $fillable = [
        'user_id',
        'name',
        'price',
        'itemdescription',
        'activeInactive'
    ];

    public function packageitems()
    {
        return $this->hasMany(PackageItem::class);
    }

    public static function arrayPackageItemSelect()
    {
        $arr = [];
        $items = Item::all();
        foreach($items as $item){
            $arr[$item->id] = $item->name;
        }

        return $arr;
    }

}
 

моя модель PackageItem

 class PackageItem extends Model
{

    protected $fillable = [
        'user_id',
        'item_id',
        'price'
    ];

    protected $table='packageitems';

    public static function itemModel()
    {
        return $this->belongsTo(Item::class);
    }

}
 

мой контроллер PackageItem (СОЗДАТЬ) и получение идентификатора элемента из другой таблицы (внешний ключ), чтобы я мог указать для него категорию.

     public function addPackageItem(Request $request)
{
        $user = Auth::user();
        $item = Item::arrayPackageItemSelect();

        echo $item; // when I echo this I get Array to Conversion String in POSTMAN

        $fields = $request->validate([
            'user_id' => 'required',
            'item_id' => 'required',
            'price' => 'required|numeric'
        ]);

        // // echo $items;

        $package = PackageItem::create([
            'user_id' => $user->id,
            'item_id' => $item,
            'price'=> $fields['price']
        ]);

        return response($package, 201);
        
    }
 

Что я получаю, когда повторяю элементы

введите описание изображения здесь

Результаты, которые я получаю от POSTMAN

ПОЧТАЛЬОН

Моя схема

введите описание изображения здесь

Вот где моя ссылка https://www.artofcse.com/learning/product-view-insert-update-delete

Кто-нибудь может мне помочь, что не так?

Ответ №1:

В вашем контроллере (метод addPackageItem):

 $package = PackageItem::create([
            'user_id' => $user->id,
            'item_id' => $fields['item_id'],
            'price'=> $fields['price']
        ]);
 

Кроме того, я думаю, что в вашей модели PackageItem есть ошибка. belongsTo не должен вызываться в статическом методе :

 public function itemModel()
    {
        return $this->belongsTo(Item::class);
    }