2016-06-22 8 views
0

と遠くのデータを取得することはできません。は、私は、このセットアップを持っている例のためにhasManyThrough方法

​​3210

私はcollected_itemモデルを通じてitem_modelに関するすべての投稿を取得します。

だから私はこのようなitem_modelに関係を設定します。

public function posts() 
    { 
     return $this->hasManyThrough('App\Post', 'App\Collected_item'); 
    } 

が、その後どのように私は記事を取得していますか?

$posts = Item_model::where('model_name', 'LIKE', $q . '%')->posts(); 

または

$posts = Item_model::where('model_name', 'LIKE', $q . '%')->posts()->get(); 

エラーが返さ:私は名前でモデルを探していますので、私は無駄にこのようにしようとした

コール未定義のメソッドを照らし\ Databaseへ\クエリー\ビルダー:: posts()

答えて

0

私はついにそれを働かせました。これは、ポストモデルと第五の4番目の外部キーは、ローカル(item_model)キーである第三の引き数は、中間モデルの外部キーであるItem_model

public function posts() 
    { 
     return $this->hasManyThrough('App\Post', 'App\Collected_item', 'model_id', 'collected_item_id', 'id'); 
    } 

に正しい関係です。先制私は何ができるのポストをロードせず

その後

$item= Item_model::find(220); (an item which I know has related posts) 

$posts = $item->posts; 

dd($posts); 

これはポストを返すので、それはあなたが前に他の提案のようにそれらをロードする必要が真実ではない、hasManyThrough方法は、担当しています投稿を取得します。

0

「with」メソッドを試してください。

$posts = Item_model::with('posts')->where('model_name', 'LIKE', $q . '%')->get(); 

ポストは、私はあなたが

Item_modelを呼び出します行う前に、メソッドの名前を宣言しなければならないと思う方法

$posts = Item_model::has('posts')->where('model_name', 'LIKE', $q . '%')->get(); 
+0

これは機能しますが、この方法では、関連する投稿を持っているかどうかにかかわらず、すべてのitem_modelsを取得します。私は、モデルではなく記事だけを取り出す必要があります。 – Chriz74

+0

このように、Hasメソッドを使用しなければならない投稿を持つitem_modelsだけが必要な場合は $ posts = Item_model :: has( 'posts') - > where( 'model_name'、 'LIKE'、$ q '%') - > get(); –

+0

いいえ、私はポストがモデルではなく、laravelドキュメントごとにhasManyThroughを使って可能でなければなりません。しかし、それは動作しません。 – Chriz74

-1

を「持っている」を使用存在するだけitem_modelsを取得する:: with( 'posts') - > get();

+0

これは動作しますが、この方法では、関連する投稿を持っているかどうかにかかわらず、すべてのitem_modelsを取得します。私は、モデルではなく記事だけを取り出す必要があります。 – Chriz74

+0

あなたのlaravelのバージョンは何ですか? –

+0

バージョン5.1.28(LTS) – Chriz74

関連する問題