Laravel雄辩的关系

时间:2016-07-20 15:48:28

标签: laravel eloquent laravel-5.2

我有以下表格结构:

Table Name - Users
    Column: id, name, email, etc

Table Name - Plugins
    Column: id, theme_id, type_id, code,

Table Name - Templates
    Column: id, theme_id, user_id, templatedata

Table Name - Userplugins
    Column: id, user_id, plugins_id, contents

现在我调用ID为templates的路由,其中​​templatedataJSON个数据,我能够获得Plugins code将我的刀片文件中的代码作为:

@foreach($gettemplate as $renderer)

    {!! $plugins->find($renderer)->code !!}

@endforeach

但我无法获取UserPlugins表中的内容。以下是我controller,我试图这样做:

public function get_template($id)
{
    $template = Template::findOrFail($id);
    $gettemplate = json_decode($template->templatedata);
    $plugins = Plugins::all();
    $user = User::findorFail($id);
    return $user->userplugins()->contents;
    //return view('nitseditor.test', ['plugins' => $plugins, 'gettemplate' => $gettemplate, 'user' => $user]);
}

我已经评论了我的观点,只是为了检查输出。 我已定义relationship我的model文件中的App/User.php包含:

public function userplugins(){

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

App\UserPlugin.php档案中我已经

protected $fillable = [

    'contents',

];

我收到以下错误:

  

未定义属性:Illuminate \ Database \ Eloquent \ Relations \ HasMany :: $ contents

请帮帮我,谢谢。

1 个答案:

答案 0 :(得分:1)

在以下行中:

return $user->userplugins()->contents;

当您致电$user->userplugins()表示您调用关系方法时。它不会为您返回Eloquent Collection或Eloquent Object。

您需要致电

$user->userplugins

获取UserPlugin的集合

然而,当你打电话

return $user->userplugins->contents;

你会收到错误,因为return $user->userplugins是一个Eloquent Collection,你无法从中获取内容。

您可以获取特定UserPlugin的内容。例如,用户的第一个UserPlugin如:

return $user->userplugins()->first()->contents;