php - 属于许多获取所有行(Laravel)

标签 php mysql laravel laravel-5

我有一个用户模型和一个属性模型。用户有 3 个角色:admin、manager 和 broker。管理员可以查看所有属性,而经理和经纪人只能查看分配给他们的属性。一个经理或经纪人可能拥有许多属性(property),而一个属性(property)可能属于任意数量的经理和经纪人。这是我的用户模型中的 properties 关系:

/**
 * Get all properties belonging to this user.
 *
 * @return [type]            [description]
 */
public function properties()
{
    if ($this->isAdmin()) {
        return Property::all();

    } elseif ($this->isManager() || $this->isBroker()) {
        return $this->belongsToMany('App\Property');

    }

    return null;
}

这对于检索所有属性非常有效,但如果我必须执行 select 或 where 语句,我只能在用户不是管理员时这样做,因为当前代码返回整个集合如果用户是管理员。这使得无法将此方法用于搜索功能和任何类型的约束。

显然,我不想在 property_user 表中为每个属性和管理员创建一条记录,因为那样会占用不必要的空间。但是,我不希望在我的 Controller 中有额外的逻辑来仅在用户是经理或经纪人时调用 properties 方法,而在用户是管理员时执行自定义查询。

有什么方法可以返回包含每一行的 Illuminate\Database\Eloquent\Relations\BelongsToMany 吗?或者我仍然可以将查询链接到另一个 Laravel 对象?

最佳答案

你会想要返回一个查询对象。

public function properties()
{
    if ($this->isAdmin()) {
        return Property::query();
    } elseif ($this->isManager() || $this->isBroker()) {
        return $this->belongsToMany('App\Property');
    }

    return null;
}

关于php - 属于许多获取所有行(Laravel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34910125/

相关文章:

php - 在 Laravel 5.5 中通过路由名称获取 API URL

PHP 插入查询不起作用并且没有给出任何错误

php - 在 PHP 中从 MySQL 获取最后 7 行

php - SQL查询只返回第一行

php - Laravel Varbox 如何扩展 Revision 模型

javascript - Bootstrap Modal 无法刷新数据

php - 保存用户生成的表单创建的查询

php - 如果加入日期已满六个月,则从表中删除一条记录

json - Laravel:更新嵌套的 json 对象

php - Laravel:如何在嵌套的 hasMany 关系上取平均值(hasManyThrough)