【问题标题】:Laravel Eloquent Join multi tablesLaravel Eloquent 连接多表
【发布时间】:2019-09-06 01:36:56
【问题描述】:

我的雄辩加入有些问题。 我有 4 个表关系

贷款表 / 贷款

 loan_id | quantity | user_id
 1       |   4      |   1   .

详细贷款表 /Loandetails

 loandetail_id | loan_id | inventory_id
 1             | 1       | 4          .

库存表 /Inventories

inventory_id  | name_inventory
  4           | Keyboard     .

用户表 /Users

user_id  | Name
  1      | This is my name

我想要这样的结果与雄辩的查询

{
   'loan_id' => 1,
   'inventory' => 'keyboard',
   'user' => 'This is my name',
   'quantity' => 4
 }

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    您需要在模型中映射以下关系。

    Loan.php

    public function loanDetails()
    {
        return $this->hasMany(LoanDetail::class);
    }
    
    public function user()
    {
        return $this->belongsTo(User::class);
    }
    

    LoanDetails.php

    public function inventory()
    {
        return $this->belongsTo(Inventory::class);
    }
    
    public function loan()
    {
        return $this->belongsTo(Loan::class);
    }
    

    你可以这样做从数据库中查询数据,

    $loan = Loan::with('loanDetails.user', 'loanDetails.inventory')->find(1);
    

    然后像这样得到你想要的结果,

    return [
                'loan_id' => $loan->id,
                'inventory' => $loan->inventory, //this will return the full inventory object you can do  $loan->inventory->name_inventory to access attributes
                'user' => $loan->user->name,
                'quantity' => $loan->quantity 
            ]
    

    【讨论】:

    • 这是错误响应Call to undefined relationship [Loandetails] on model [App\Loan].这是我的模型pastebin.com/AGRPRkmm
    • 我猜错了,你没有映射所有关系,让我更新答案
    【解决方案2】:
    $data = DB::table('loan')
            ->select('loan.id as loan_id','invetoris.name_inventory as inventory','users.Name as users', 'loan.quantity' )
            ->join('loandetail', 'loandetail.loan_id', '=', 'loan.loan_id')
            ->join('inventoris', 'inventoris.inventory_id', '=', 'loandetail.inventory_id')->join('users', 'users.user_id', '=', 'loan.user_id')
            ->get()->toArray();
    
    
    
    $info = [];
    foreach($data as $key => $val) {
    $info[] = [
    'loan_id' => $val['loan_id'],
    'inventory' => $val['inventory'],
    'user' => $val['users'],
    'quantity' => $val['quantity']
    ]; }
    

    【讨论】:

      【解决方案3】:
        $data = DB::table('Loan')
          ->select('Loan.id as loan_id','Inventories.name_inventory as 
                   inventory','Users.Name as users', 'Loan.quantity' )
          ->join('Loandetails', 'Loandetails.loan_id', '=', 'Loan.loan_id')
          ->join('Inventories', 'Inventories.inventory_id', '=', 
                 'Loandetails.inventory_id')
          ->join('Users', 'Users.user_id', '=', 'Loan.user_id')
          ->get()->toArray();
      

      【讨论】:

        猜你喜欢
        • 2016-07-22
        • 2023-03-07
        • 1970-01-01
        • 2018-08-07
        • 2019-12-06
        • 2021-01-05
        • 2018-11-06
        • 1970-01-01
        相关资源
        最近更新 更多