属性[name]在此集合实例上不存在

8 浏览
0 Comments

属性[name]在此集合实例上不存在

我在数据库中有3个表(users,areas,area_user),

Users表:

id

name

username

password

areas表:

id

name

area_user表:

id

user_id

area_id

我试图创建一个(用户列表页面),它将显示所有用户表列和用户分配的区域。

User.php模型文件

belongsToMany('App\Area','area_user');
    }
}

Area.php模型文件:

belongsToMany('App\User','area_user','area_id','user_id');
    }
}

UserController@index文件:

middleware('auth');
    }
    /**
     * 显示资源列表。
     *
     * @return \Illuminate\Http\Response
     */
    public function index(){
        $users = User::get();
        return view('users._list',
        ['users'=> $users]
    );
    }
}

最后是表视图文件:

@foreach($users as $u)
            
                {{$u->name}}
                
                {{$u->areas}}
                {{route('show_user', ['id' => $u->id])}}
            
@endforeach

如果我在用户表视图中只使用areas属性($u->areas),它将显示所有的areas列:

[

{

"id": 3,

"name": "C",

"location_id": 1,

"created_at": null,

"updated_at": null,

"pivot": {

"user_id": 4,

"area_id": 3

}

},

{

"id": 4,

"name": "D",

"location_id": 2,

"created_at": null,

"updated_at": null,

"pivot": {

"user_id": 4,

"area_id": 4

}

}

]


@foreach($users as $u)
                
                    {{$u->name}}
                    
                    {{$u->areas->name}}
                    {{route('show_user', ['id' => $u->id])}}
                
@endforeach

请注意,如果我在上面的视图中指定Areas关系中的列名($u->areas->name),则会显示错误:

属性[name]在此集合实例上不存在。(视图:C:\xampp\htdocs)

如何在视图文件中只显示(areas.name)列?

0
0 Comments

(Property [name] does not exist on this collection instance)这个问题的出现的原因是因为areas是一个集合(collection),而不是一个模型实例(model instance)。在集合上访问属性时,会出现该错误。

解决方法是使用pluck方法获取areas集合中的name属性,然后使用implode方法将其连接为字符串,最后在HTML模板中显示出来。

具体代码如下:

<td>{{ $user->areas->pluck('name')->implode(' ') }}</td>

通过这个解决方法,我们可以在HTML模板中正确地显示areas集合中的name属性。这样就避免了出现(Property [name] does not exist on this collection instance)这个错误。

0
0 Comments

(Property [name] does not exist on this collection instance)这个问题出现的原因是因为在一个多对多的关系中,不能直接显示areas属性。需要通过迭代来访问areas属性。

解决方法是使用foreach循环来迭代访问areas属性,并显示name属性。

下面是解决问题的代码:

($users as $u)
    ($u->areas as $area)
        {{ $area->name }}

通过以上代码的使用,问题得以解决,现在areas属性能够正常显示了。

0
0 Comments

(Property [name] does not exist on this collection instance)这个问题的出现原因是因为在循环中使用了错误的语法。由于areas是一个集合,所以应该使用循环来遍历它。解决方法是使用正确的循环语法来遍历areas集合,同时确保在循环中正确使用变量。

以下是解决方法的示例代码:

    ($users as $u)
    <tr role="row" class="odd">
        <td class="sorting_1">{{$u->name}}</td>
        <td></td>
        <td>
        ($u->areas as $area)
            {{$area->name}}, 
        </td>
        <td>{{route('show_user', ['id' => $u->id])}}</td>
    </tr></tbody>

另外,如果您想要用逗号分隔它们,可以使用下面的代码,而无需使用循环:

    ($users as $u)
    <tr role="row" class="odd">
        <td class="sorting_1">{{$u->name}}</td>
        <td></td>
        <td>
            {{ $u->areas->pluck('name')->implode(', ') }}
        </td>
        <td>{{route('show_user', ['id' => $u->id])}}</td>
    </tr></tbody>

这个解决方法在我的laravel应用程序从4.2升级到5.x时解决了类似的问题,并且运行正常。

0