2016-05-25 26 views
0

我有兩個模型,App \ Song(belongsTo App \ Host)和App \ Host(hasMany App \ Song)。爲什麼雄辯搜索Active =?

在我的控制,我使用下面的查詢:

$songs = Song::whereHas('host', function($query) { 
    $query->eligable()->activeHost(); 
})->inDownloadedQueue()->get(); 

這是從下面的查詢範圍派生在我Song.php模型 公共職能scopeEligable($查詢)

{ 
    $query->where('skip_threshold', '>', \DB::raw('songs.attempts')); 
} 

public function scopeActiveHost($query) 
{ 
    $query->where('active', 1); 
} 

public function scopeInDownloadQueue($query) 
{ 
    $query->whereNull('downloaded'); 
} 

這並未沒有任何結果返回,轉向->toSql()函數進行調試,查詢如下:

select * from "songs" where exists (select * from "hosts" where "songs"."host_id" = "hosts"."id" and "skip_threshold" > songs.attempts and "active" = ?) and "downloaded" is null 

這個host = ?似乎是問題所在。任何想法,爲什麼這是?

回答

1

?是一個SQL參數。 Eloquent使用PDO參數化查詢,這有助於防止SQL注入。

該查詢本身將顯示active = ?,但是當執行查詢時,它會將您的值(1)綁定到此參數,並且實際執行的查詢將爲active = 1

查詢沒問題,您只是沒有得到任何結果,因爲您的下載隊列中沒有任何歌曲與合格的活動主機相關。

+0

感謝您對PDO查詢的解釋,這是數據問題。 – Imran