2017-03-22 11 views
1

"prealerts"テーブルに結合された "jobs"テーブルに基づいて失敗したジョブのリストを取得する必要があります。唯一の仲介者は、 "prealerts"で1つの列を共有し、 "jobs"でもう1つの列を共有する "パッケージ"テーブルです。Laravelで3つのテーブルを結合しても動作しません

All the structure mentioned before is here

filters.blade.php:

<input type="checkbox" name="failed" id="failedJobs" value="true"/> 

(ここではチェックボックスがあります)そして、私は何をしようとしたが、次のとおりです。

構造はこれです

JobRepositoriy.php:

public function search(array $filters = []) 
{ 
. 
. 
. 
. 

    $query = $this->model 
      ->select('jobs.*') 
      ->distinct(); 

. 
. 
. 
. 

    if (isset($filters['failed']) && $filters['failed']){ 
      $query->ofSuccess(false); 
    } 


    return $query->orderBy('jobs.id', 'desc'); 
} 

jobs.php(モデル):

public function scopeOfSuccess($query, $success){ 
    return $query->join('packages', 'packages.job_id', '=', 'jobs.id') 
     ->join('prealerts', 'prealerts.package_id', '=', 'packages.id') 
     ->where('prealerts.created_at', '>=', '2017-01-01 00:00:00') 
     ->where('prealerts.success', $success); 
} 

しかし、示された結果は、前述の要件を満たしていません。あなたが試すことができ

+0

を私が前にLaravelを使用し、正直に言うと、それをお勧めしません。いくつかのトピックについてのガイダンスが不十分な新しいフレームワークです。しかし、それは私の意見です。 – Californium

+0

あなたは今何を得ていますか? –

+0

@californiumそれは私の仕事の必要条件です。私はlaravelもあまりにも嫌いです – Cristian

答えて

0

public function scopeOfSuccess($query, $success) 
{ 
    return $query->join('packages', 'packages.job_id', '=', 'jobs.id') 
     ->join('prealerts', function ($join) use ($success) { 
      $join->on('prealerts.package_id', '=', 'packages.id'); 
      $join->where('prealerts.created_at', '>=', '2017-01-01 00:00:00'); 
      $join->where('prealerts.success', $success); 
     }); 
} 
+0

あなたの答えをありがとう。 – Cristian

+0

Connection.php行のQueryException 729: SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文を '?'の近くで使用するようにしてください。 1行目(SQL: 'jobs'からの集計としてcount(*)を選択)' packages'.job_id' = 'jobs'.'id'内部結合' pre''' prealerts''package_id '=' packages'.'id'と 'prealerts''created_at'> = 2017-01-01 00:00:00と' prealerts'.success') – Cristian