我最近开始使用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