Laravel $附加不显示在结果中

时间:2016-02-24 18:11:44

标签: php laravel

我正在尝试为我的模型添加一个值,但它没有被添加。我做错了吗?

以下是我的定义:

protected $appends = ['hash'];

public function getHashAttribute(){
    return 'test';
}

public function scopeGetDeveloperGames($query, $userid){
    return $query
        ->join('game_info', 'games.game_id', '=', 'game_info.game_id')
        ->where('games.user_id', $userid)
        ->orderBy('games.created_at', 'desc')->limit(9);
}

当我进行转储时,结果中没有显示的是对模型的调用:

$items = GamesModel::select('title', 'games.user_id', 'games.game_id', 'games.created_at', 'icon_large', 'icon_medium', 'icon_small', 'short_description')
->GetDeveloperGames($userid)
->get();
dd($items);

3 个答案:

答案 0 :(得分:8)

来自文档

  

将属性添加到追加列表后,它将包含在模型的数组和JSON表单中。 appends数组中的属性也将遵循模型上配置的可见和隐藏设置。

如果你使用toArray()或toJson():

$items = GamesModel::select('title', 'games.user_id', 'games.game_id', 'games.created_at', 'icon_large', 'icon_medium', 'icon_small', 'short_description')
->GetDeveloperGames($userid)
->get()
->toArray();

它将可见。

答案 1 :(得分:1)

我遇到的另一个稍微不同但相似的问题是使用with()方法。

我有Event::with(['event_types:id,name,url']),其中的URL由getUrlAttribute()模型中的EventType定义。但这没有用,因为我的语法event_types:id,name,url试图加载不兼容的特定列。

为解决此问题,我删除了此语法,只是做了Event::with(['event_types']),它按预期加载了所有内容。

答案 2 :(得分:0)

这是供将来使用,以防其他人通过Google遇到类似(不完全)问题的访问: 我有类似的问题,原来我没有正确使用Eloquent,我在模型中附加了EventyTypes,但是我正在使用$eventTypes = DB::table('event_types')->get()获取数据。这是不正确的。然后,我将其修改为$eventTypes = EventTypes::get();并成功了。这是有道理的,因为附加项位于模型中,您应该从模型而不是使用DB获取数据。