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 传递给拥有一个,我会收到以下错误

好的,我明白这一点。

所以我的问题是我能够以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,但我需要使用 belongs_to。user1808639 可能不起作用,因为您在城市模型中仍然有一个“has_many”。

于 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 回答