2017-08-03 5 views
0

なぜ私はLaravelアプリケーションで作業中に次のエラーが発生し始めたのか分かりません。ここでなぜ私は突然Laravelのモデルエラーのクエリ結果を取得し始めていませんか?

No query results for model [App\Hotspot].

私のモデル関数は、ユーザーのホットスポットを取得することです。

public function hotspots() 
{ 
    return $this->hasManyThrough(Hotspot::class, Operator::class, 'id', 'operator_id'); 
} 

ここではデータを取得するためにクエリを実行しています。

$hotspotId = $id; 
$hotspot = Auth::user()->hotspots()->findOrFail($hotspotId); 

突然このエラーが発生し始めました。私は何がうまくいかなかったのか分からない!私はインターネット上で解決策を見つけようとしましたが、全く異なるケースです。

+0

このユーザーに関連するホットスポットはもう存在しないようです。関連するアイテムが存在することをデータベースで確認しましたか? – BizzyBob

+0

ちょっと@bizzybob、私はすべての要求で、実際のIDの代わりにID「1」が渡されたと考えました。私は何が間違っているのか分かりません、私は非常に不満です。 –

+0

これを試してみてください:$ this-> hasManyThrough(Hotspot :: class、Operator :: class、 'user_id'、 'operator_id'、 'id');そして動作しているかどうか確認してください... – Laerte

答えて

0

https://laravel.com/docs/5.4/eloquent-relationshipsに示されているように、Has Many Through。あなたがホットスポットに彼の操作を接続していることを後

return $this->hasManyThrough(Hotspot::class, Operator::class, 'user_id', 'operator_id', 'id'); 

これが原因あなたにnecesaryではまず、彼のユーザにホットスポットを接続しています。そのため彼の命令は正しい。

特定の時間働く理由は、IDの衝突のためです.Uuidsを使用した場合、このコードはうまくいかないでしょう。また、このソリューションを次のようにデバッグすることもできます。

DB::enableQueryLog(); 

// General i feel like Auth::user()->hotspots->where('id', $hotspotId)->first() is more Laravel'sh. 
// Like this you will query a lot, if used in wrong cases. 
$hotspot = Auth::user()->hotspots()->findOrFail($hotspotId); 

dd(DB::getQueryLog()); 

また、生のSQLを取得することも、時々別のビューを提供します。

dd(Auth::user()->hotspots()->toSql()); 
関連する問題