отношения один ко многим возвращают нуль - PullRequest
0 голосов
/ 02 марта 2019

Есть две модели. Продукт и изображение В Моей модели продукта:

// one to many   relationship with images table 
public function images()
{
    return $this->hasMany('App\image');
}

Изображение Модель

public function product()
{
    return $this->belongsTo('App\product');


}

ProductController

public function productDetail($slug)
{
    $product = product::where([
      ['slug',$slug],
      ['seller_id' ,Auth::id()],
    ])->first();
    //$storagePath = Storage::get(['images']);
    //get the image of that product 
    //$image   = asset('storage/product_images'.$product->images);



    if($product)
    {
      $image    = Storage::url($product->images); // give the image path from product table

      //give images from the image table 
      $product_image   = \App\product::find(11)->images;
         $arr = array();

          foreach(\App\product::find($product->id)->images() as $i)
          {
            array($arr,$i->image);
          }

          dd($arr);  // problem returning always null 






      return view('backEnd.seller.product_detail',compact('product','image')); 
    }

Постановка проблемы: В моем контроллере, когда я пытался получить все изображения определенного продукта, я получаю Нуль .Я пытаюсь решить эту проблему один день назад. Пожалуйста, помогите мне Что мне не хватает?

миграция таблицы изображений

public function up()
{
    Schema::create('images', function (Blueprint $table){
        $table->increments('id');
        $table->unsignedInteger('product_id');
        $table->string('image');
        $table->timestamps();
    });
}

миграция таблицы продукта

public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('seller_id');
        $table->unsignedInteger('category_id');
        $table->string('product');
        $table->text('discription');
        $table->string('type')->nullable();
        $table->date('date');
        $table->string('images');
        $table->string('slug');
        $table->integer('sold_qty')->default(0);
        $table->timestamps();
    });
}

Примечание: Я убедился, что в моей таблице изображений есть 5 записей product_id 11.Пожалуйста, помогите Спасибо

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Я предполагаю, что ваши названия моделей Product и Image.

Пожалуйста, проверьте, даст ли приведенное ниже изменение то, что вы хотите ...

return $this->hasMany('App\Image');

обратите внимание, что название моделиначинается с заглавной буквы и,

return $this->belongsTo('App\Product');

и ограничения базы данных, поскольку @ steve-trap, упомянутый не является необходимым.В любом случае, он введет ограничение, чтобы вы не могли добавить изображение для несуществующего продукта.

Затем в контроллере:

foreach (App\Product::find($product->id)->images as $image) {
    $arr[] = $image->image;
}
0 голосов
/ 03 марта 2019

Я решил эту проблему следующим образом:

  1. Изменил названия моделей в верхний регистр.
  2. Изменил изображения с именами столбцов таблицы продуктов на покрытия.
  3. Изменен метод images () на рисунки в модели продукта

Вывод: Если вы используете имя столбца, то не используйте это имя столбца для построения отношений.и всегда пишите название модели, которое начинается с заглавной буквы.

0 голосов
/ 02 марта 2019

Вы должны сделать отношения в вашей базе данных.Вы можете сделать это, добавив это к миграции изображения:

$table->foreign('product_id')->references('id')->on('product');
...