2017-04-10 12 views
0

以下の複雑なクエリがあり、Laravelで使用したいと考えています。しかし今まで私は成功しなかった。あなたの誰かがLaravelのクエリービルダーに "翻訳"する方法を示すかもしれません。ここで複雑なクエリをLaravel Query Builderに "翻訳"するには?

Workbenchでうまく動作することを元のクエリ:

select * from lemma l 
inner join etymology e on l.id=e.lemma_id_fk 
inner join gloss g on e.id = g.etymology_id 
inner join wold_meanings w on g.gloss=w.meaning 
where g.gloss like '%flower%' #paper, ocean, etc. 
limit 100; 

私は次のことを試してみましたたより:

$results = DB::table('lemma') 
    ->join('etymology', 'lemma.id', '=', 'etymology.lemma_id_fk') 
    ->join('gloss', 'etymology.id', '=', 'gloss.etymology_id') 
    ->join('wold_meanings', 'gloss.gloss', '=', 'wold_meanings.meaning') 
    ->select(DB::raw('lemma.*')) 
    ->where('gloss.gloss', 'like', '%flower%') 
    ->get(); 

とも:

$results = DB::table('lemma') 
    ->select(DB::raw("select * from lemma l 
    inner join etymology e on l.id=e.lemma_id_fk 
    inner join gloss g on e.id = g.etymology_id 
    inner join wold_meanings w on g.gloss=w.meaning 
    where g.gloss like '%flower%' 
    limit 1")); 

とあまりにもこの:

$results = DB::raw("select * from lemma l 
    inner join etymology e on l.id=e.lemma_id_fk 
    inner join gloss g on e.id = g.etymology_id 
    inner join wold_meanings w on g.gloss=w.meaning 
    where g.gloss like '%flower%' 
    limit 100"); 

しかし、私はまったく成功しませんでした。:-(

誰でも私に正しい方法を教えてください。私はLaravel 5.4を使用しています。

== EDIT#1 ==

ここでの結果が示されるべきビュー:

 <table class="table table-bordered table-condensed table-hover table-responsive table-striped" id="table"> 
      <thead> 
       <tr> 
        <th>id</th> 
        <th>lemma_id</th> 
        <th>headword</th> 
        <th>lemma</th> 
        <th>pos</th> 
        <th>gender</th> 
        <th>language</th> 
        <th>origin_family</th> 
        <th>origin</th> 
        <th>short_path</th> 
        <th>origin_path</th> 
        <th>etymology_text</th> 
        <th>first_use</th> 
        <th>lang</th> 
        <th>pageid</th> 
        <th>term</th> 
        <th>non_latin_script</th> 
        <th>lang_2</th> 
        <th>gloss</th> 
        <th>sequence</th> 
        <th>lemma_id_fk</th> 
        <th>derivatives_id</th> 
        <th>etymology_id</th> 
        <th>meaning</th> 
        <th>semantic_category</th> 
        <th>semantic_field</th> 
        <th>simplicity_score</th> 
        <th>age_score</th> 
        <th>borrowed_score</th> 
        <th>description</th> 
        <th>typical_context</th> 
        <th>representation</th> 
        <th>sub_code</th> 
       </tr>    
      </thead> 

      <tbody> 
      @foreach($results as $result) 
       <tr> 
        <td>{{$result->id}}</td> 
        <td>{{$result->lemma_id}}</td> 
        <td>{{$result->headword}}</td> 
        <td>{{$result->lemma}}</td> 
        <td>{{$result->pos}}</td> 
        <td>{{$result->gender}}</td> 
        <td>{{$result->language}}</td> 
        <td>{{$result->origin_family}}</td> 
        <td>{{$result->origin}}</td> 
        <td>{{$result->short_path}}</td> 
        <td>{{$result->origin_path}}</td> 
        <td>{{$result->etymology_text}}</td> 
        <td>{{$result->first_use}}</td> 
        <td>{{$result->lang}}</td> 
        <td>{{$result->pageid}}</td> 
        <td>{{$result->term}}</td> 
        <td>{{$result->non_latin_script}}</td> 
        <td>{{$result->lang_2}}</td> 
        <td>{{$result->gloss}}</td> 
        <td>{{$result->sequence}}</td> 
        <td>{{$result->lemma_id_fk}}</td> 
        <td>{{$result->derivatives_id}}</td> 
        <td>{{$result->etymology_id}}</td> 
        <td>{{$result->meaning}}</td> 
        <td>{{$result->semantic_category}}</td> 
        <td>{{$result->semantic_field}}</td> 
        <td>{{$result->simplicity_score}}</td> 
        <td>{{$result->age_score}}</td> 
        <td>{{$result->borrowed_score}}</td> 
        <td>{{$result->description}}</td> 
        <td>{{$result->typical_context}}</td> 
        <td>{{$result->representation}}</td> 
        <td>{{$result->sub_code}}</td> 
       </tr> 
      @endforeach 
      </tbody> 
     </table> 

== EDIT#2 ==

はただ、他のいくつかのテストをしましたここで、使用時には、使用時には、 eは表の補題のみからの結果、すなわち結合を無視する。だから私は<td>{{$result->id}}</td>から<td>{{$result->pageid}}</td>までのビューのテーブルに結果を受け取りますが、それ以外のものは受け取りません。

+0

いずれかのエラーが発生しているか、間違った結果が得られていますか? –

+0

最後のクエリーは同じ生のクエリーであるため、確実に機能するはずです。 '$ result/$ results'変数には何が入っていますか?あなたは何を期待していますか? –

+0

@MayankPandeyzどちらのエラーも間違った結果...私は私の見解を見ているだけで、テーブルのtheadを見ていますが、結果はtbodyに現れるはずです。コンソールには何もありません。 –

答えて

1

select()への呼び出しをチェーンから削除すると機能します。

selectメソッドは、クエリの一部であるSELECTを表します。この方法は、以下の書き込み:

->select(DB::raw('lemma.*')) 

それは同じだ。つまり

SELECT lemma.* FROM ... 

、あなただけlemmaテーブルから列を選択しています。しかし

、あなたはまた、他のテーブルから列を選択するために、あなたのチェーンの一部を省略することと同じである、そのデフォルトの動作にクエリビルダのフォールバックを行います:

SELECT * FROM ... 

あなたの場合

->select('*') 
関連する問題