如何使用Eager加载并加入雄辩的同时在laravel 4 [英] How to use Eager Loading and Join in Eloquent at a same time in laravel 4
问题描述
模型
class WPModel extends Eloquent
{
protected $table = 'work_processes';
protected $guarded = array('id');
protected $softDelete = true;
// declaring one-to-many relationship
public function relatedWPAQs()
{
return $this->hasMany('WPAQModel', 'wp_id');
}
public function relatedUsers()
{
return $this->belongsTo('UserModel', 'wp_owner_id');
}
}
class UserModel extends Eloquent
{
protected $table = 'users';
protected $softDelete = true;
public function relatedWPs()
{
return $this->hasMany('WPModel', 'wp_owner_id');
}
}
class WPAQModel extends Eloquent
{
protected $table = 'wp_audit_questions';
protected $fillable = array('wp_id', 'wp_audit_question');
// declaring one-to-many relationship - the inverse way
public function relatedWP()
{
return $this->belongsTo('WPModel', 'wp_id');
}
public function scopeWpParent($query, $id)
{
return $query->where('wp_id', '=' ,$id);
}
}
控制器
class WPAQController extends BaseController
{
public function showWPAQ($wpid)
{
$workprocess = WPModel::where('id', $wpid)
->join('users', 'users.id', '=', 'work_processes.wp_owner_id')
->select('users.user_name', 'work_processes.*')
->with(array(
'relatedWPAQs' => function($query) use ($wpid)
{
$query->where('wp_id', '=',$wpid);
}
))
->get();
return View::make('wpaqshow')->with(compact('workprocess'));
}
}
当我运行此代码,我收到以下错误
when I run this code, I get following error
SQLSTATE [23000]:完整性约束违规:1052
中的列'id'其中子句是不明确的(SQL:select用户
。user_name
,
work_processes
。* fromwork_processes
inner joinusers
on
users
。id
=work_processes
。wp_owner_id
其中
work_processes
。deleted_at
为空,id
=?)(Bindings:数组(
0 =>'1',))
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous (SQL: select
users
.user_name
,work_processes
.* fromwork_processes
inner joinusers
onusers
.id
=work_processes
.wp_owner_id
wherework_processes
.deleted_at
is null andid
= ?) (Bindings: array ( 0 => '1', ))
推荐答案
以下:
$workprocess = WPModel::where('work_processes.id', $wpid)
->join('users', 'users.id', '=', 'work_processes.wp_owner_id')
->select('users.user_name', 'work_processes.*')
->with(array(
'relatedWPAQs' => function($query) use ($wpid)
{
$query->where('wp_id', '=',$wpid);
}
))
->get();
您加入了几张表。现在laravel有很多 Ids
。你必须告诉Laravel哪个 id
在Laravel应该使用的位置。
You have joined few tables. Now laravel has many Ids
. You have to tell Laravel which id
in where clause Laravel should use..
WPModel::where('id', $wpid)
这篇关于如何使用Eager加载并加入雄辩的同时在laravel 4的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!