我有一個工作模型,可以有很多產品。Laravel用hasMany搜索
Job.php
class Job extends Eloquent
{
....
public function products()
{
return $this->hasMany('Products');
}
....
}
現在我希望用戶能夠按產品搜索工作。 形式來搜索產品:
job.search.blade.php
....
<div class="form-group required has-feedback products displayed">
{{ Form::label('product_id', 'Product', array('class' => 'control-label')) }}
{{ Form::select('product_id', Product::product_select(), Input::old('product_id'), array('class' => 'form-control', 'required' => 'required')) }}
<span id="add_product_button" class="glyphicon glyphicon-plus-sign form-control-feedback"></span>
</div>
<div class="form-group products hidden">
{{ Form::label('product_id_2', 'Product #2', array('class' => 'control-label')) }}
{{ Form::select('product_id_2', Product::product_select(), Input::old('product_id_2'), array('class' => 'form-control', 'required' => 'required')) }}
</div>
<div class="form-group products hidden">
{{ Form::label('product_id_3', 'Product #3', array('class' => 'control-label')) }}
{{ Form::select('product_id_3', Product::product_select(), Input::old('product_id_3'), array('class' => 'form-control', 'required' => 'required')) }}
</div>
<div class="form-group products hidden">
{{ Form::label('product_id_4', 'Product #4', array('class' => 'control-label')) }}
{{ Form::select('product_id_4', Product::product_select(), Input::old('product_id_4'), array('class' => 'form-control', 'required' => 'required')) }}
</div>
<div class="form-group products hidden">
{{ Form::label('product_id_5', 'Product #5', array('class' => 'control-label')) }}
{{ Form::select('product_id_5', Product::product_select(), Input::old('product_id_5'), array('class' => 'form-control', 'required' => 'required')) }}
</div>
....
在JobController,用實例化的變量:
$query = Job::orderBy('job_id', 'DESC');
我怎樣才能對用戶有規定的產品?
我的嘗試越來越接近,但我一直堅持了一段時間。
JobController.php
....
if (Input::has('product_id') && Input::get('product_id') != 0)
{
$query->with(array('products' => function($products)
{
$products->where('product_id', '=', Input::get('product_id'));
}));
}
$jobs = $query->paginate(15);
....
編輯:解決
我顯然不能用「與」搜索,所以我不得不使用SQL連接。 http://forumsarchive.laravel.io/viewtopic.php?id=13238
因此,對於具有的hasMany搜索(),
if (Input::has('product_id') && Input::get('product_id') != 0)
{
$query->where('inventory.product_id', '=', Input::get('product_id'));
}
if (Input::has('product_id_2') && Input::get('product_id_2') != 0)
{
$query->leftJoin('inventory AS inventory_2', 'inventory_2.job_id', '=', 'jobs.id');
$query->where('inventory_2.product_id', '=', Input::get('product_id_2'));
}
if (Input::has('product_id_3') && Input::get('product_id_3') != 0)
{
$query->leftJoin('inventory AS inventory_3', 'inventory_3.job_id', '=', 'jobs.id');
$query->where('inventory_3.product_id', '=', Input::get('product_id_3'));
}
if (Input::has('product_id_4') && Input::get('product_id_4') != 0)
{
$query->leftJoin('inventory AS inventory_4', 'inventory_4.job_id', '=', 'jobs.id');
$query->where('inventory_4.product_id', '=', Input::get('product_id_4'));
}
if (Input::has('product_id_5') && Input::get('product_id_5') != 0)
{
$query->leftJoin('inventory AS inventory_5', 'inventory_5.job_id', '=', 'jobs.id');
$query->where('inventory_5.product_id', '=', Input::get('product_id_5'));
}
如果有人可以給我推薦一種有效的方式這樣做,請讓我知道。
謝謝。
你想檢索什麼結果? –
@deczo假設有一個工作#1有三種產品:A,B和C.還有另一個工作#2有兩種產品,A和B.現在,他們想要搜索帶有產品的工作; A,B,C。這樣只有Job#1會出現。 – Raza
然後你需要'whereIn'和'count'。這正是你所需要的:http://stackoverflow.com/questions/24704119/laravel-tag-search-to-return-images-that-contain-all-tags#answer-24706347 –