【问题标题】:How to use Eager Loading and Join in Eloquent at a same time in laravel 4如何在 laravel 4 中同时使用 Eager Loading 和 Join Eloquent
【发布时间】:2013-12-26 07:10:05
【问题描述】:

模型

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'));
    }
}

当我运行这段代码时,我得到以下错误

SQLSTATE[23000]:违反完整性约束:1052 列 'id' 在 where子句不明确(SQL:选择users.user_namework_processes.* 来自 work_processes 内部连接 ​​users on users.id = work_processes.wp_owner_id 哪里 work_processes.deleted_at 为 null 且 id = ?) (绑定: 数组 ( 0 => '1', ))

【问题讨论】:

    标签: laravel-4 inner-join eloquent eager-loading


    【解决方案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 在 where 子句中 Laravel 应该使用哪个 id..

    WPModel::where('id', $wpid)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-18
      • 2014-03-17
      • 2019-10-20
      • 2017-09-17
      • 2014-10-22
      • 1970-01-01
      • 2014-05-28
      • 2019-07-09
      相关资源
      最近更新 更多