学校のプロジェクトでは、LaravelフレームワークでWebサイトを作成しています。コントローラーの多対多のテーブルのデータを処理できません。
これが私のモデルです:
class Item extends Eloquent {
public function Tags()
{
return $this->belongsToMany('Tag', 'items_has_tags', 'items_id', 'tags_id');
}
}
class Tag extends Eloquent {
public function LearningMaterials()
{
return $this->belongsToMany('LearningMaterial', 'learning_materials_has_tags', 'tags_id', 'learning_materials_id');
}
}
コントローラ内のアイテムからすべてのタグを繰り返したい:
//get all items
$all = Item::where('public', '1')->get();
foreach($allLm as $item){
$tags = $item->Tags();
var_dump('will iterate');
foreach($tags as $t){
var_dump('will not iterate');
}
}
私のコードの何が問題になっていますか?アイテムのタグを処理するにはどうすればよいですか?
参考:私は検索エンジンを作成しています。ユーザーが「mana」などの入力値を挿入すると、「management」というタグが付いたすべてのアイテムが表示されます。
LaravelのbelongsToMany
メソッドクエリ関連モデルであり、それらを取得しません。これは、クエリにいくつかの追加の制約が必要になる場合があるためです。あなたがする必要があるのは:
$tags = $item->Tags()->get();
または単に:
$tags = $item->Tags;
リレーションシップ関数を呼び出すと、リレーションシップオブジェクト(この場合はBelongsToMany
のインスタンス)が返されます。これを使用して、実行する前にクエリにコンポーネントを追加して実行できます。
例えば:
_$only4Tags = $item->Tags()->take(4)->get();
_
リレーションのresultが必要な場合は、get()
またはそれより単純なものを呼び出し、magicプロパティを使用します。
_$tags = $item->Tags()->get();
$tags = $item->Tags;
_