我真的很喜欢laravel,我确定我做错了什么
我有2张桌子。 Cities
和users_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
来匹配?或者我干脆做错了?有人可以给我一个基本的例子吗?
谢谢大家
答案 0 :(得分: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'。
答案 1 :(得分:1)
试试这个:
class Profile extends Eloquent
{
public function city()
{
return $this->belongs_to('City'); // city_id in the table
}
}
答案 2 :(得分: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');
}
}
答案 3 :(得分:0)
表行不应包含空格。所以重命名“firt name”| “姓氏”中的“姓氏” “姓”。 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;