Атрибуты модели, связанные с Laravel, пусты? - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь дать возможность пользователю видеть его заказы.Я создал отношения, но когда я (dd) результат функции, атрибуты связанной модели пусты.

Я не знаю, что не так.

Вот моя функция покупателя

// Заказы покупателей

 public function myOrders()
 { 
 $user = User::find(auth()->user()->id); 
 $user = $user->products();
 dd($user);// related model attributes shows empty

 return view('myOrders')->with(compact('user'));

 }

и вот мой пользователь

 public function products()
 {
  return $this->hasMany(Products_model::class);
 }

 public function orders()
 {
 return $this->hasMany(Order::class);
 }

public function allOrdersBuyerSeller() 
{ 
return $this->hasMany(OrderProduct::class); 
}

products_model

 public function orders() 
 {
return $this->belongsToMany('App\Order', 'order_product');
 }

 public function user() 
 {
return $this->belongsTo('App\User');
 }

Миграция пользователя

  */
public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
  }

Миграция продукта

  public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('pro_name');
        $table->integer('pro_price');
        $table->text('pro_info');
        $table->integer('stock');
        $table->integer('category_id');
        $table->string('image')->nullable();
        $table->timestamps();

        $table->bigInteger('seller_id')->unsigned()->index();
        $table->foreign('seller_id')->references('id')->on('users')->onDelete('cascade');
    });
   }

Я хотел бы видеть атрибуты таблицы, такие как цена, имя, информация, изображение и т. Д.

1 Ответ

1 голос
/ 20 июня 2019

За исключением комментариев о вашем коде, причина того, что вы не видите результат вашего запроса products, заключается в том, что вы не передаете закрытие запроса.

$user = $user->products();

В настоящее время $user является экземпляром QueryBuilder. Пока вы не используете closure, например first(), get(), paginate() и т. Д., Вы не сможете видеть строки. Измените свой код следующим образом:

$products = $user->products;
// OR
$products = $user->products()->get();

Если вы опустите (), он загрузит отношение, используя products()->get(), если он еще не загружен.

Редактировать: Скорее всего, вам необходимо включить внешние ключи в ваши отношения, поскольку название модели не будет совпадать:

User.php

public function products(){
  return $this->hasMany(Product_model::class, "seller_id", "id");
}

Вероятно, лучше всего просмотреть содержание документации для отношений; https://laravel.com/docs/5.8/eloquent-relationships. Существует множество неправильных практик, связанных с именами, запросами и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...