2

私はlaravelに本当に慣れていないので、何か間違ったことをしていると確信しています

私は2つのテーブルを持っています。Citiesusers_metadata

私の都市テーブルは次のようになります

id | City        |
1  | New York    |
1  | Los Angeles |

ユーザーのメタデータ

user_id | firt name | last name | cities_id |
1       | Jonh      | Doe       |         2 |

だから私の問題は、都市IDがユーザーIDと一致するため、ニューヨークを取得するリレーションを作成するときです

都市モデル

class City extends Eloquent 
{
    public static $table = "cities";

    public function profile()
    {
        return static::has_many('Profile');
    }
}   

プロファイル モデル

class Profile extends Eloquent 
{
    public static $timestamps = false;

    public static $table = "users_metadata";

    public static $key = "user_id";

    public function city()
    {
        return static::has_one('City');
    }
}   

エラー

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'profile_id' in 'where clause'

SQL: SELECT * FROM `cities` WHERE `profile_id` = ? LIMIT 1

Bindings: array (
  0 => 1,
)

ID を has one に渡さないと、次のエラーが表示されます

わかりました。

だから私の質問はcities_id、私の関係で何らかの形で外部キーを渡して一致させることができますか? それとも私はそれをすべて間違っていますか?誰かが私に基本的な例を教えてもらえますか?

ありがとうございます

4

4 に答える 4

2

これを試して:

都市モデル

class City extends Eloquent 
{
    public static $table = "cities";
    public function profile()
}   

プロファイル モデル

class Profile extends Eloquent 
{
    public static $timestamps = false;
    public static $table = "users_metadata";
    public static $key = "user_id";
    public function city()
    {
        return static::belongs_to('City');
    }
}

has_one を使用する必要があると考えて同じ問題に遭遇しましたが、begs_to を使用する必要がありました。都市モデルにまだ「has_many」があったため、user1808639 はおそらく機能しませんでした。

于 2013-05-16T20:23:30.123 に答える
1

これを試して:

class Profile extends Eloquent
{
    public function city()
    {
        return $this->belongs_to('City'); // city_id in the table
    }
}
于 2013-01-16T11:36:13.807 に答える
0

Laravel には、外部キーを自動的に検出する方法があります。したがって、データベーススキーマでは...このモデルは正常に機能するはずです 次を試してください

user_id | firt name | last name |   city_id | //city not cities
1       | Jonh      | Doe       |         2 |

-

class Profile extends Eloquent 
{
    public static $timestamps = false;
    public static $table = "users_metadata";

    public function city()
    {
        return $this->has_one('City');
    }
}

/

class City extends Eloquent 
{
    public static $timestamps = false;

    public function profiles()
    {
        return $this->has_many('Profile');
    }
}
于 2013-01-15T10:48:18.183 に答える
0

テーブルの行に空白を含めないでください。だから「最初の名前」の名前を変更 | 「名字」の「姓」 | "苗字"。SQL エラーは、City::find(1) のように逆の方法でモデルを呼び出していることを示しています。この場合、Laravel は「Cities」テーブル内に、通常は「profile_id」であるプロファイルの外部キーを期待します。

私はあなたがこのようなものを探していると思います:

$user_id = 1; 
$user = Profile::find($user_id);

echo $user->firstname." ".$user->lastname." lives in ".$user->city->city;
于 2013-02-15T21:07:17.760 に答える