0

Eloquent を使用してデータベースからユーザーを取得しています。ユーザー テーブルの郵便番号と都市テーブルの郵便番号を「結合」して、都市名を取得したいと考えています。

私のテーブルの簡略化されたバージョンは次のとおりです。

users =>
  id
  username
  password
  postal_code

cities =>
  postal_code
  city_name

私の User モデルには、都市テーブルとの関係を宣言する city() というメソッドがあります。

public function city() {
    return $this->hasOne('cities', 'postal_code');
}

問題は、User::with('city')->find($user_id) を実行しようとすると、メソッドに渡される値が postal_code ではなく主キーである ID になることです。

したがって、私のクエリは次のようになります(これはID 1のユーザー用です):

select * from `cities` where `cities`.`postal_code` in ('1')

代わりに postal_code を渡したいと指定する方法はありますか?

4

2 に答える 2

1

Relation クラスが使用するためparent->getKey()(この場合、親は User です)、結果は「1」になります。

User のキーを postal_code に変更するのは良い選択肢ではないと思います;) したがって、users テーブルに「city_id」列を、都市に「id」列を与えることで、設計どおりに機能するようになると思います。

もう 1 つは、リレーションを返すのではなく、次のようなものです。 return City::wherePostalCode($this->postal_code)->first();

于 2013-11-13T12:26:49.250 に答える