Функция отношений Laravel показывает ноль - PullRequest
0 голосов
/ 05 июля 2019

Я создаю небольшой интернет-магазин, где пользователи могут создавать заказы, а продавцы могут видеть заказы. Я определил отношения, но связанные функции являются нулевыми. Вот так выглядят мои таблицы в phpmyAdmin https://imgur.com/a/C2PSmFt

Вот как я определил отношения в моих моделях.

User.php

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

Order.php

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

public function products()
{
    return $this->belongsToMany('App\Product')->withPivot('quantity','total','Subtotal');
}

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

 public function orderInfo()
 {
    return $this->belongsTo(OrderProduct::class, 'seller_id');
 }

Это моя функция в контроллере

$orders = Auth::user()->sellerOrders()->with('productInfo','orderInfo')->get();

Когда я dd($orders), это то, что я получаю

 Collection {#305 ▼
 #items: array:1 [▼
 0 => Order {#286 ▼
  #table: "orders"
  #fillable: array:5 [▶]
  #connection: "mysql"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:8 [▼
    "id" => 9
    "user_id" => 1
    "shipping_email" => "878888"
    "shipping_name" => "hattta"
    "shipping_city" => "kljjdjd"
    "shipped" => 0
    "created_at" => "2019-07-05 01:33:58"
    "updated_at" => "2019-07-05 01:33:58"
  ]
  #original: array:8 [▶]
  #changes: []
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: array:2 [▼
    "productInfo" => null
    "orderInfo" => null
  ]
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #guarded: array:1 [▶]
}
]
}

Как мне показать productInfo и orderInfo? Ваша помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Если вы посмотрите на атрибуты модели Order из вашего дампа, поля seller_id:

#attributes: array:8 [▼
"id" => 9
"user_id" => 1                      <--- There is a user_id, but not seller_id
"shipping_email" => "878888"
"shipping_name" => "hattta"
"shipping_city" => "kljjdjd"
"shipped" => 0
"created_at" => "2019-07-05 01:33:58"
"updated_at" => "2019-07-05 01:33:58"
]

нет. Вам нужно либо добавить seller_id поле для модели и добавьте значение в базу данных, или, возможно, проще, измените ваши отношения на модели Order , чтобы внешний ключ был user_id вместо seller_id.

Как только вы исправите это, вы должны увидеть значение вашего **user** в Ордене.Так что если вы перебираете $orders, вы можете сделать $ order-> user, и он должен вернуть пользователя для заказа.

То же самое для вашего productInfo.В модели Order нет product_id, и из-за нестандартного имени (т.е. это не просто 'product()') вам нужно будет указать внешний ключ в методе отношений на Заказ модель.Кроме того, не забудьте добавить product_id к модели Order в качестве заполняемой.

Та же проблема относится к вашему методу orderInfo() - в заказе нет 1030 *модель для обеспечения отношений - может применяться то же исправление, что и выше.

0 голосов
/ 05 июля 2019

Поскольку у вас есть в отношении return hasMany => в ордерах, у вас будет массив, и поскольку вы уже запросили его, вы должны запросить каждый элемент следующим образом:

foreach($orders as $order){
    echo $order->productInfo->propertyOfProductInforTable;
    echo $order->products->name; //or whatever is in your product table relation
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...