【问题标题】:Selecting columns while using has_many_and_belongs_to in Eloquent ORM在 Eloquent ORM 中使用 has_many_and_belongs_to 时选择列
【发布时间】:2012-08-29 04:39:08
【问题描述】:

我有三张桌子,placesplace_userusers。我想使用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');
    }
}

谢谢。

【问题讨论】:

  • 请提供PlaceUser 型号代码。我有一种不好的感觉,您的 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>')) 表示法。

标签: php laravel eloquent


【解决方案1】:

我感觉这会导致错误,因为“name”/“email”一列或两列在您的 Place 和 User 表中不明确。

在您的解决方案中,您可以编写指定表的列:

Place::find(1)->users()->get(array('users.name','users.email'));

【讨论】:

    【解决方案2】:

    仍然不能使用 get,first 方法,但 select 方法正在工作:

    Place::find(1)->users()->select(array('users.name', 'users.email'))->get();
    

    【讨论】:

    • ->get() 将采用选择数组的第一个参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 2015-02-10
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多