所以我有3张桌子。用户-库存项目。用户hasmany项目,到目前为止我没有问题。我可以通过这种关系联系到用户项目。
项目表包含:user_id,item_id
所以我的问题是通过item_id到达用户清单的项目信息(它将找到项目表的ID并带来信息)。我无法管理它,我需要你建议哪些关系适合我的目标。
class User extends Authenticatable
{
public function Inventory(){
return $this->hasMany('App/Item');
}
class UserItem extends Authenticatable
{
public function Item(){
return $this->hasMany('App/Item');
}
public function profile(){
$inventory_items = Auth::user()->Inventory;
return view('profile', compact('inventory_items'));
}
所以我可以使用这些代码获取用户的项目,但是。当我希望通过此$inventory_items->item
获取项目信息时,它无效。我认为这是因为我的关系错误。
@foreach($inventory_items as $inventory_item)
{{$inventory_item->Item}}<br><br>
@endforeach
(2/2)ErrorException类'App / Item'未找到(查看: C:\ XAMPP \ htdocs中\ X-GOTL \资源\视图\ profile.blade.php)
答案 0 :(得分:0)
我认为您的代码中存在一些错误,不是吗?请参阅我的内联评论。此外,您似乎忘记了每个用户有很多库存,每个库存有很多项目,所以您需要一个双向循环。
public class HomeController : Controller
{
private readonly IUserUtilities userUtilities;
public HomeController(IUserUtilities userUtilities)
{
this.userUtilities=userUtilities;
}
public ActionResult Index()
{
// use this.userUtilities;
// to do : return something
}
}
此外,您的错误告诉您尚未创建文件class User extends Authenticatable
{
# There are many inventories per user so put a plural 's' on items
public function inventories()
{
# This should NOT be App\Item
return $this->hasMany('App\Inventory');
}
...
# This should NOT be UserItem but Inventory, right? (Remember to rename that file too!)
class Inventory extends Authenticatable
{
# There are many items per inventory so put a plural 's' on items
public function items()
{
return $this->hasMany('App\Item');
}
,因此请运行App\Item
。
然后在你的控制器中执行:
php artisan make:model Item
并在您的视图中
public function profile()
{
$inventories = Auth::user()->inventories;
return view('profile', compact('inventories'));
}
答案 1 :(得分:0)
Dev倾向于犯错误(正确)和/(错误).. ErrorException Class'App / Item'显示它无法找到'App / Item'其实错误的语法
return $this->hasMany('App/Item');
更改为
return $this->hasMany(Item::class);
答案 2 :(得分:0)
所以,实际上我找到了我需要的答案。我只需要创建数据透视表以在用户和项目之间建立连接。因此,如果有人遇到同样的问题,他可以观看此视频https://www.youtube.com/watch?v=akKWC_vP7sE。无论如何,感谢您的回答!