Laravel正确的关系

时间:2017-10-29 13:48:58

标签: php laravel laravel-5

所以我有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)

3 个答案:

答案 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。无论如何,感谢您的回答!