我最近开始使用laravel,并且在雄辩的join上遇到了一些问题。
我想加入三个表:
用户(id)
用户账单(id、用户id、公司id、帐户)
账单(身份证、公司身份证、账户、金额)
我从用户id开始(例如=1)
从中我想查询用户账单并找到用户id=id的所有UB
下一步,我想查询账单并查找账单公司id和账户与用户账单匹配的所有账单
基本上我想找到属于那个特定用户的所有账单。但是,帐单没有用户id,必须与用户帐单(公司id和帐户)核对
//这将返回id=user\u id的所有用户账单

$results = User::findOrFail(1);
$ub = $results->user_bills;

从那里开始,我不知道如何加入法案或获得收藏品。任何帮助都将不胜感激。
模型(可能是错误的)
<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Eloquent;

class User extends Authenticatable
{
    use Notifiable;

protected $fillable = [

        'name',
        'email',
        'password'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function user_bills()
    {
        return $this->hasMany('App\UserBills', 'user_id', 'id');
    }
}

用户账单
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserBills extends Model
{

    protected $table = 'ub';

    protected $fillable =
    [
        'user_id',
        'company_id',
        'account',
    ];


    public function user()
    {
        return $this->belongsTo('App\User' , 'id' , 'user_id');
    }

}

账单:
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Bills extends Model
{

    protected $table = 'bills';

    protected $fillable =
    [
        'company_id',
        'account',
        'period',
        'amount',
    ];

    public function user_bills()
    {
        return $this->belongsTo('App\UserBills');
    }

}

最佳答案

如果您的UserBills有多个Bills,您可以在HasManyThrough的文档中阅读您的解决方案。
我现在无法测试此代码,因此您可以将其视为一个示例:

class User extends Authenticatable {

   ...

  public function Bills()
  {
    return $this->hasManyThrough('App\UserBills', 'App\Bills');
  }

}

现在您可以使用
$User = User::findOrFail(1);
$Bills = $User->Bills()->get(); // collection with bills of your user instance

编辑1
您应该在UserBills表中添加一个bill_id
现在你可以试试这个代码了
class User extends Authenticatable {

  ...

  public function getBillsAttribute() {
    $user_id = $this->id;

    return App\Bills::rightJoin('ub', function($join) use ($user_id) {
      $join->on('ub.bill_id', '=', 'bills.id')
           ->where('ub.user_id', '=', $user_id);
    })->get();
  }

}

像那样使用它
$User = User::findOrFail(1);
$Bills = $User->Bills; // collection with bills of your user instance

10-06 13:39
查看更多