0

我正在尝试使用 Laravel 和引导程序包 - 坦率地说,我不确定这是 laravel 问题还是引导程序问题。但是,我试图弄清楚如何使用关系数据生成表。

我想要做的是创建一个带有添加列的表,该列显示用户拥有的角色。我的表基于权威的模型,所以它们都是标准的用户、角色和角色用户表。

显然,链中让我绊倒的方法是“角色”方法,我不知道如何获取给定用户的角色。表的其余部分按预期工作。

 echo Table::striped_open(); 
 echo Table::headers('ID','Name', 'Email', 'Roles'); 
 echo Table::body($users) 
    ->ignore('password', 'created_at', 'updated_at')
    ->order('id','name','email')
    ->roles(function($users) {
        return $users['id']->roles();
        });
 echo Table::open();
4

2 回答 2

0

鉴于这个问题已有数月之久,我敢肯定这是学术性的,但我想我会回答它以帮助整个社区。

你这样做:

echo Table::striped_open(); 
echo Table::headers('ID','Name', 'Email', 'Roles'); 
echo Table::body($users) 
   ->ignore('password', 'created_at', 'updated_at')
   ->order('id','name','email')
   ->roles(function($user) {
       return User::find($user['id'])->roles();
       });
echo Table::open();

你有两个问题。

首先是您试图将 $users 对象传递到闭包中。您不想这样做,部分原因是您可能会遇到变量冲突问题,部分原因是该闭包是在呈现的每一行上执行的,因此使用单数不会导致任何混淆。

第二个是你假设$user传递给闭包的参数是你的模型的一个实例。它不是。它是模型属性的数组。因此,如果roles()是您的模型的关系,那么您必须实际检索正在转换为数组并传递给闭包的模型。

希望这可以帮助!

于 2013-05-15T19:57:28.463 回答
0

你不能这样做$users['id']->roles(),因为那没有意义:你获取一个整数,然后尝试在它上面调用一些东西。如果你这样做会发生什么$users->roles()

于 2013-01-29T08:46:04.700 回答