Извлечение красноречивой связи с laravel

#php #laravel #laravel-5 #eloquent

#php #laravel #laravel-5 #eloquent

Вопрос:

Когда я пытаюсь получить название категории из моего продукта, я обнаружил, что мне пришлось использовать ‘C’, а не ‘c’, прежде чем он получил результаты. Однако, когда я пытаюсь получить имя поставщика, строчная буква s работает просто отлично. Мне было интересно, что вызывает эту разницу. Также, если я dd($ var), ожидается, что поле relations будет пустым. Я предположил, что это будет иметь что-то связанное с взаимосвязями, определенными в моих моделях.

Blade.php

   <td>{{$product->Category->name}}</td>
     <td>{{$product->salePrice}}</td>
     <td>{{$product->stock}}</td>
 <td>{{$product->supplier->company_name}}</td>
  

Product.php

  public function category()
    {
        return $this->belongsTo('AppCategory','category');
    }
 public function supplier()
    {
        return $this->belongsTo('AppSupplier','supplier_id');
    }
  

Category.php

 public function product()
    {
        return $this->hasMany('AppProduct');
    }  
  

Supplier.php

 public function product()
    {
        return $this->hasMany('AppProduct');
    }
  

Ответ №1:

Вам не хватает _id в вашей модели продукта:

 public function category()
{
    return $this->belongsTo('AppCategory','category_id');
}
  

Или оставить пустым

 public function category()
{
    return $this->belongsTo('AppCategory');
}
  

В вашем контроллере

 public function index()
{
  $products = Product::all()->with('category');
  return view('your_view', compact('products'));
}

  

Если вы dd используете продукты
В вашем представлении вы увидите, что связь была загружена из-за

Быстрая загрузка

При доступе к отношениям Eloquent в качестве свойств данные отношений «загружаются лениво». Это означает, что данные взаимосвязи фактически не загружаются до тех пор, пока вы не получите первый доступ к свойству. Однако Eloquent может «нетерпеливо загружать» отношения во время запроса родительской модели.

 @foreach($products as $product)
<td>{{$product->category->name}}</td>
     <td>{{$product->salePrice}}</td>
     <td>{{$product->stock}}</td>
 <td>{{$product->supplier->company_name}}</td>
@endforeach

  

Комментарии:

1. спасибо за ваш ответ, но имя столбца, на который ссылаются, — category, а не category_id, поэтому я не думаю, что проблема в этом