雄辩的ORM:两个关系表中的任何WHERE

时间:2013-12-17 21:58:26

标签: laravel laravel-4 eloquent

可以在Eloquent ORM中创建吗?

SELECT * FROM 'data'
JOIN 'notice' ON 'data'.'id_notice' = 'notice'.'id' 
WHERE 'data'.'escalator'= 'yes' 
AND 'data'.'floors'= '2'
AND 'data'.'color'= 'white'
AND 'notice'.'price'= '50000' 
AND 'notice'.'city'= 'bardejov';

这是从过滤器中选择的(随机数)。

通知型号:

class Notice extends Eloquent {
    protected $table = 'notices';
    public function data() {
    return $this->hasOne('data'); 
    }
}

数据模型:

class Data extends Eloquent {
    protected $table = 'data';
    public $timestamps = false;
    public function notice() {
        return $this->belongsTo('notice', 'notice_id');
    }
}

我的尝试:

$query = new Data;
  foreach()
    $query = $query->where('value', '=', $data['key']);
  endforeach
$result = $query->paginate(5);

但是,如果值来自表格注意 - 错误:未知列...

2 个答案:

答案 0 :(得分:1)

如果您想在Laravel中使用join,可以使用查询构建器。

DB::table('data')
    ->join('notice', 'data.id_notice', '=', 'notice.id')
    ->where('escalator', 'yes')
    ->where('floors', 2)
    ->where('color', 'white')
    ->where('notice.price', 50000)
    ->where('notice.city', 'bardejov')
    ->get();

http://laravel.com/docs/queries#joins

  Data::join('notice', 'data.id_notice', '=', 'notice.id')
    ->where('escalator', 'yes')
    ->where('floors', 2)
    ->where('color', 'white')
    ->where('notice.price', 50000)
    ->where('notice.city', 'bardejov')
    ->get();

答案 1 :(得分:0)

您可以尝试此操作(Check Eager Load Constraints

$data = Data::with(array('notice' => function($query)
{
    $query->where('price', 50000)->where('city', 'bardejov');
}))->where('escalator', 'yes')->where('floors', 2)->where('color', 'white')->get();