2013-01-15 61 views
2

我真的很新laravel,我敢肯定我做错了什么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与匹配用户名为

城市模型

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

@ w0rldart当原因不明显时,请给出您的编辑的描述性原因 - 并且不需要“编辑”标题。 – AD7six

回答

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'); 
    } 
} 
+0

感谢您的回复,但它仍然相同,我回到SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'profile_id',我仍然需要将id传递给城市关系,仍然将id与user_id匹配,而不是id与city_id SQL:SELECT * FROM'cities' WHERE'profile_id' =? LIMIT 1 – Levi

+0

只是一个小的错字修正,''配置文件()'不''配置文件()',因为它'has_many'。发布您的代码,在您拨打模型 – Alex

+0

编辑我的问题,并感谢您在我身上花费的时间 – Levi

1

试试这个:

class Profile extends Eloquent 
{ 
    public function city() 
    { 
     return $this->belongs_to('City'); // city_id in the table 
    } 
} 
+0

感谢您的答复,尝试不工作相同的结果:( – Levi

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; 
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'。