【发布时间】:2012-08-29 04:39:08
【问题描述】:
我有三张桌子,places、place_user、users。我想使用has_many_and_belongs_to 方法根据Place 模型中的place_user 表列出users。但我不想选择所有用户列。我尝试按以下方式进行:
Place::find(1)->users()->get(array('name','email'));
还有:
Place::find(1)->users()->first(array('name','email'));
但他们没有工作。
处理这个问题的最佳方法是什么?
放置模型:
class Place extends Eloquent {
public static $timestamps = true;
public function users() {
return $this->has_many_and_belongs_to('user');
}
}
用户模型:
class User extends Eloquent {
public static $timestamps = true;
public function get_updated_at_readable() {
return date('d.m.Y / H:i:s', strtotime($this->get_attribute('updated_at')));
}
public function get_created_at_readable() {
return date('d.m.Y / H:i:s', strtotime($this->get_attribute('updated_at')));
}
public function places() {
return $this->has_many_and_belongs_to('place','place_user');
}
}
谢谢。
【问题讨论】:
-
请提供
Place和User型号代码。我有一种不好的感觉,您的User模型没有扩展 Eloquent,或者您的关系设置不正确。 -
我添加了 Place 和 User 模型。
-
我不确定,但
Place::users()方法不应该也分配place_user枢轴吗?另外,我认为User::places()应该是has_many()。我怀疑用户同时属于地方,反之亦然。 -
有数据透视表,
return $this->has_many_and_belongs_to('user');指定数据透视表为place_user。 has_many() 不使用数据透视表,所以如果我使用它,我只会得到位置 ID。另外,在您说要删除 User::places() 方法后,我尝试过,没有任何改变。我应该说,Place::find(1)->users()->get(); Place::find(1)->users;等正在工作。只是我无法指定列。 -
尝试指定列时是否出错?并且,尝试
->get(array('<table>.<column>', '<table>.<otherColumn>'))表示法。