2016-05-19 9 views
0

私は単純なドロップダウンをHTMLコード内に2つのテーブルから作成したいと思います。私のコードでは、他のテーブルの列と連結する関係データを取得できません。例えば、これは私のコードです:Laravelは、関係とconcat列から単純なドロップダウンを作成します

$user_accounts = UserAccountNumber::with('currencyType')->select('*', DB::raw('CONCAT("CardNumber: ", card_number) AS account_info')) 
      ->whereUserId(Auth::user()->id) 
      ->pluck('account_info', 'id'); 

このコードは正常に動作、しかし、私はUserAccountNumberテーブルといくつかのcurrencyType表の列をconactしたいと私は例えばDB::raw()

へのTableName.ColumnNameを使用カント:

$user_accounts = UserAccountNumber::with('currencyType') 
    ->select(
     '*', 
     DB::raw('CONCAT(" CardNumber: ", card_number, "CurrencyType: ", currencyType.title) AS account_info')) 
     ->whereUserId(Auth::user()->id) 
->pluck('account_info', 'id'); 

その後、私はこのエラーを取得:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'currencyType.currency_type' in 'field list' (SQL: select *, CONCAT("AccountNumber: ",account_number, " CardNumber: ", card_number, "CurrencyType: ", currencyType.currency_type) AS account_info from `user_account_numbers` where `user_id` = 17) 
モデルで

currencyType方法:

public function currencyType() 
{ 
    return $this->belongsTo(CurrencyType::class, 'currency_type', 'id'); 
} 
+1

Laravelは2つのクエリで負荷関係を結ぶため、結合しません。 PHPで手動でJOINを実行するか、文字列を連結する必要があると思います –

+0

@LêTrầnTiếnTrungありがとう –

答えて

1

Laravelは使用しませんが、あなたがそのための具体的なクエリを記述する必要がありますので、関係を行うために結合します。そのためには、クエリービルダーを使用してください。このような

何か作業をする必要があります:

$user_accounts = DB::table('user_account_numbers') 
    ->join('currencyType', 'user_account_numbers.currency_id', '=', 'currencyType.id') 
    ->select('*', DB::raw('CONCAT(" CardNumber: ", card_number, "CurrencyType: ", currencyType.title) AS account_info')) 
    ->whereUserId(Auth::user()->id) 
    ->get(); 

を私はあなたのアイデアを取得し、データベーススキーマに合うようにそれを適応させることができると思います。

+0

EloquentではなくQuery Builderを使用するデフォルトの解決策です。ありがとう –

関連する問題