私はデータベースから次のものを取得しようとしています:
次のクエリを使用します。
static public function getConversation($id)
{
$conversation = DB::table('conversation_messages')
->where('belongsTo', $id)
->join('users', 'conversation_messages.sender', '=', 'users.id')
->join('user_avatars', 'conversation_messages.sender', '=', 'user_avatars.id')
->select('users.name', 'conversation_messages.*', 'user_avatars.name', 'user_avatars.filetype')
->get();
return $conversation;
}
これまでのところうまくいきますが、アバターの列名は 'name
'テーブルの列名のように 'users
'です。このクエリを使用して$conversation->name
を介して出力を取得する場合、avatar.name
はusers.name
を上書きします
laravel 5.1でmysql "as"機能のようなクエリ出力の名前を変更する方法はありますか?
例えば:
$conversation->avatarName
$conversation->userName
まあ大丈夫..私は簡単な解決策を見つけました ここ
->select('users.name as userName', 'conversation_messages.*', 'user_avatars.name as avatarName', 'user_avatars.filetype')
言及できるように、要求された「as-Feature」をtable.columnNameの横に追加しました
3つのテーブルのスタッフ、顧客、および予約(ピボットテーブル)を結合しようとするこの例を見てください。
$bookings = \DB::table('bookings')
->join('staffs', 'staffs.id' , '=', 'bookings.staff_id')
->join('customers', 'customers.id' , '=', 'bookings.customer_id')
->select('bookings.id', 'bookings.start_time', 'bookings.end_time', 'bookings.service', 'staffs.name as Staff-Name', 'customers.name as Customer-Name')
->orderBy('customers.name', 'desc')
->get();
return view('booking.index')
->with('bookings', $bookings);
私は次の問題、簡単な例がありました:
$result = Donation::join('user', 'user.id', '=', 'donation.user_id')->where('user.email', '[email protected]')->first();
$result
はDonation
モデルのコレクションです。しかし注意:
両方のテーブルには、「created_at」列があります。今、どのcreated_at
は、$result->created_at
?知りません。雄弁は暗黙のselect *
結合を実行し、モデルDonation
を返しますが、追加の属性を使用します。 created_at
はランダムに見えます。だから、私が本当に欲しかったのは、電子メールを持つユーザーのすべてのDonation
モデルを返すことです[email protected]
解決策はこれです:
$result = Donation::select('donation.*')->join('user', 'user.id', '=', 'donation.user_id')->where('user.email', '[email protected]')->first();
ええ、どちらかのテーブルの列の名前を変更するだけで機能します。また、できることは、user.name列の名前を任意に変更し、conversation_messagesのsender列の名前をidに変更して、自然な結合を実行することです。