Laravel null对象有很多关系

时间:2016-05-31 17:39:04

标签: php mysql database laravel eloquent

已经解决了我不应该在模型中调出我的属性。出于某种原因,这使它无法工作。

我有以下两个模型的结构,列表和图像。表格图像的FK listing_id引用了表格列表中的id

我雄辩的上市模式:

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');
    }

}

我雄辩的图像模型:

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;

    }

我似乎无法使用图像对象返回我的列表 - 它们始终为null。以下是一个示例回复:

  

{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,用于此特定项目。我无法弄清楚可能出现的问题,我已经尝试了几乎所有的建议。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在Laravel表格列及其值保存在$attributes属性中,Laravel使用__get()魔术方法获取$attributes数据。通过在模型中将public $listing_id定义为属性,它就像告诉Laravel一样:"嘿,这是listing_id,而不是保留$attributes属性的那个,所以请改为返回#34 ;

定义关系时:

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

将返回public $listing_id属性,其值为null。删除那些公共属性定义,它应该是有效的。