aテーブルのid=1
と
bテーブルのid=2でa_id=1だとして、
これをjoinすると
$a = A::join('b', 'a.id', '=', 'b.a_id')->first();
とする。
このとき
$a->id; // 2
となる現象が起きました。
同じidというカラム名だからっぽいです。
このままだとidをキーにするのでリレーションで辿るデータなどがうまくとれないなど発生します。
知らないと結構やらかしそうな内容です。
回避は
$a = A::select('*', 'a.id as id')->join('b', 'a.id', '=', 'b.a_id')->first();
とかですね。
あとはこれを起こさないためのグローバルスコープなんかもissueに書かれてました。
trait OnlyMyColumnsTrait
{
public static function bootOnlyMyColumnsTrait()
{
static::addGlobalScope('only_my_columns', function (Builder $builder) {
$builder->select($builder->getModel()->getTable().'.*');
});
}
}