Laravelでテーブルをjoinで結合してテーブル間でカラム名が被ったときの対処法
Laravelでテーブルをjoinで結合してテーブル間でカラム名が被ったときの対処法
usersテーブル
id, name, class_id
classesテーブル
id, name
各テーブルが上のようなカラムを持っていたとすると、
$users = DB::table(‘users') ->select(‘users.id', ‘users.name', ‘classes.name') ->leftJoin(‘classes', ‘users.class_id', '=', ‘classes.id') ->get();
こうやった場合、echo $users->name; すると「桜組」みたいな結果が返ってきて本当に欲しかった「太郎」のようなユーザー名がclassesテーブルのnameに上書きされてしまいます。
本来のSQL文ならclasses.name as class_nameとするのですが、Lraravelのドキュメントにはselectメソッドにas … を指定するようなオプションはありませんでした。どうしようかと思って試しに以下のように記述したところ、うまく動作しました。
$users = DB::table(‘users') ->select(‘users.id', ‘users.name', ‘classes.name as class_name') ->leftJoin(‘classes', ‘users.class_id', '=', ‘classes.id') ->get();
ふむ、おそらく’ '内のものをSQL文に投げているだけなので、as以下もそのまま投げられて動いている、って感じでしょうか