多对多关联怎么无条件得到所有数据?

// 用户
class User extends Model
{
    public int $id;
    public int $type;  // 1正常,2会员
    public string $name;

    public function nodes(){
        if ($this->type == 2) {
            // 这里当用户类型是2的时候,怎么返回所有节点
            return [];
        } else {
            // 多对多关联
            return $this->belongsToMany(Node::class);
        }
    }
}
// 节点
class Node extends Model
{
    public int $id;
    public string $name;
}
// 中间表
class UserNode extends Model
{
    public int $id;
    public int $user_id;
    public int $node_id;
}

上面我定义了三个模型(举例子用的),主要是想知道,当用户类型为 2,即会员的时候,怎么得到所有的节点???

如果用户类型是 1 的时候,返回的是 \Illuminate\Database\Eloquent\Relations\BelongsToMany 类型。

那么如果用户类型是 2 的时候,怎么做也可以返回这个类型,但是数据是节点表里的所有数据,相当于表链接查询的时候没有条件?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

belongsToMany 是来定义关联关系的,按照你的描述 type 为 2 的时候,user 和 node 是没有任何关联关系存在的,建议模型里定义一个模型获取器来处理,判断 type 类型返回相关的数据

2年前 评论