2016-05-31 7 views
0

SOLVED Я не должен был вызывать свои атрибуты в моделях. По какой-то причине это препятствовало работе.Laravel нулевой объект hasMany relationship

У меня есть следующая структура двух моделей: листинг и изображение. Изображения стола имеют FK listing_id, что соответствует id на таблице.

Мои Eloquent модель листинга:

namespace App\Models; 

use Illuminate\Database\Eloquent\Model as Model; 

class Listing extends Model { 

    protected $table = 'listings'; 
    protected $connection = 'mysql'; 

    public $id; 
    public $name; 
    public $value; 
    public $itemDescr; 
    public $user_id; 
    public $category_id; 

    protected $fillable = [ 
     'id', 
     'name', 
     'value', 
     'itemDescr', 
     'user_id', 
     'category_id' 
    ]; 

    /** 
    * Return images 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\HasMany 
    */ 
    public function images() 
    { 
     return $this->hasMany('App\Models\Image'); 
    } 

} 

Мой Eloquent модель изображения:

namespace App\Models; 
use Illuminate\Database\Eloquent\Model as Model; 

class Image extends Model 
{ 
    protected $table = 'images'; 
    protected $connection = 'mysql'; 

    public $id; 
    public $imageType; 
    public $title; 
    public $filename; 
    public $path; 
    public $author_id; 
    public $listing_id; 
    public $user_id; 
    public $size; 
    public $width; 
    public $height; 


    protected $fillable = [ 
     'imageType', 
     'title', 
     'filename', 
     'path', 
     'author_id', 
     'listing_id', 
     'user_id', 
     'size', 
     'width', 
     'height' 
    ]; 

    /** 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\BelongsTo 
    */ 
    public function listings() 
    { 
     return $this->belongsTo('App\Models\Listing', 'listing_id'); 
    } 

} 

Мой контроллер:

/** 
* Return the full list of listings 
* 
* @param Request $request 
* 
* @return string 
*/ 

    public function itemList(Request $request) 
    { 
     $listings = Listing::with('images')->get(); 

     return $listings; 

    } 

Я не могу вернуть мое объявление с изображением объекты - они всегда равны нулю. Вот пример ответа:

{ID: 6, название: "редкий предмет список", значение: "100", itemDescr: "это DESCR", user_id: 1, category_id: 6, created_at : "2016-05-30 13:47:33", updated_at: "2016-05-30 13:47:33", изображения: []}

в базе данных показывает два изображения с listing_id 6 для этого конкретного элемента. Я не могу понять, что может быть не так, я пробовал почти все предложения. Есть идеи?

+0

Это глупый вопрос, но ваша модель на App/Models? Ваш код выглядит нормально! Он должен работать ... – Laerte

+0

@ Laerte да. Я бросил sql в его работу, и я думаю, что мой список index.id идет в нулевом выражении, что меня озадачивает. – caro

+0

Я думаю, что ваши отношения обратные. Вы говорите, что есть два изображения с идентификатором листинга 6. Это означает, что списки могут иметь много изображений. – user3158900

ответ

1

В столбцах таблицы Laravel и их значения содержится в $attributes property, Laravel использует __get() магический метод для получения данных $attributes. Определив public $listing_id как собственность на вашей модели, это просто расскажет Ларавелю: «Эй, это listing_id, а не тот, который удерживал свойство $attributes, поэтому, пожалуйста, верните это вместо этого».

При определении отношения:

return $this->belongsTo('App\Models\Listing', 'listing_id', 'id'); 

public $listing_id Свойство будет возвращено что значение null. Удалите это определение публичной собственности, и оно должно быть выполнено.

+0

большое спасибо, что это сводило меня с ума – caro