2016-09-21 54 views
1

的get()我有這個在我的模型Scholar如何啓動模式不會對laravel

<?php namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Scholar extends Model { 

    protected $primaryKey = 'scholar_id'; 
    protected $fillable = ['ngo_id','scholar_lname','scholar_fname','scholar_image','scholar_nickname','scholar_cityAddress','scholar_permaAddress','scholar_birthday','scholar_placebirth','scholar_age','scholar_gender','scholar_email','scholar_contact']; 

} 

,那麼這是對我的控制器

$scholars = new Scholar; <------ 

if(Input::get('age_from')) 
    $scholars->where('age', '=', Input::get('age_from')); 

$scholars->get(); 

return $scholars; 

我要發起這個,但是當我嘗試$scholars = Scholar::all();我不能再使用->get();

無論如何如何做到這一點可選where

回答

3

您可以使用newQuery;

$scholars = (new Scholar)->newQuery(); 

if(Input::get('age_from')) { 
    $scholars->where('age', '=', Input::get('age_from')); 
} 

return $scholars->get(); 
+0

它返回我這個'非靜態方法Illuminate \ Database \ Eloquent \ Model :: newQuery()不應該被靜態調用,假設$ this來自不兼容的上下文' –

+0

啊,道歉,更新 –

0

也許這是不是做的最好的方式,但它的工作原理

試着這麼做:

$scholars = Scholar::where('id','>',0); //Assuming you have an autoincrement id in your table 

if(Input::get('age_from')) 
    $scholars->where('age', '=', Input::get('age_from')); 

$scholars->get(); 

return $scholars; 
1

如果你需要得到所有的學者,反正你可以得到所有行的集合中只一個查詢:

$allScholars = Scholar::all(); 

然後你可以從收集的任何數據:

$scholars = $allScholars->where('age', '=', Input::get('age_from')); 

現在你們所有的學者在$allScholars收藏和指定年齡的學者$scholars之一。

+0

我想使用砍砍查詢...因爲我還有其他查詢 –

+0

你能解釋一下你究竟是什麼意思? –

+1

使用'all()'選擇所有數據,然後'where()'過濾效率低下的集合。您將表中的所有數據加載到內存中,然後通過結果進行篩選。 –