当前位置: 首页 > 知识库问答 >
问题:

Laravel雄辩:一对多访问者

唐彦
2023-03-14

如何制作一对多访问器?

用户模型:

public function histories()
{
    return $this->hasMany('App\History');
}

历史模型:

public function user()
{
    return $this->belongsTo('App\User');
}

如果我真的喜欢下面,它将工作。

用户模型:

public function getHappyHistoryAttribute()
{
    return $this->products()->happyHistory()->first()->text;
}

历史模型:

public function scopeHappyHistory(Builder $builder)
{
    return $builder->where(function (Builder $query) {
                return $query->where('status', 'happy');
            });
}

控制器:

public function show($id)
{
    return view("my_view", [
        'user' => User::find($id)
    ]);
}

刀片视图:

{{ dd($user->happy_history) }}

它起作用了!

但是,我应该怎么做,如果我想要这个:

{{ dd($user->histories->happy) }}

我喜欢

历史模型:

public function scopeHappyHistory(Builder $builder)
{
    return $builder->where(function (Builder $query) {
                return $query->where('status', 'happy');
            });
}

public function getHappyAttribute()
{
    return $this->happyHistory->first()->text;
}

它不工作!

如果我编码像

{{ dd($user->histories->happy) }}

它会回来的

此集合实例上不存在属性[happy]。

如果我编码像

{{ dd($user->histories()->happy) }}

它会回来的

未定义的属性:Illumb\Database\Eloquent\Relations\HasMany::$happy

如果我错了请纠正我

共有1个答案

曹驰
2023-03-14

它不会那样工作,因为关系是oneToMany

在您的用户模型中尝试以下操作

/**
 * @return mixed
 */
public function happyHistory()
{
    //Happy history is your scope form History model
    //Following will not get you first model
    return $this->histories()->happyHistory()->first();  
}

这将为您提供第一个模型,然后您可以从用户模型执行以下操作

$user->happyHistory->text

没有测试,但这应该工作。

此外,您不需要在范围内传递查询生成器。你可以做以下事情

public function scopeStatus($query, $status = "happy")
{
    return $query->where('status', $status);
}

现在,您可以将其用于所有状态类型。

History::status()->all(); //Will return all Happy history

History::status("sad")->all(); //Will return all Sad history

希望这有帮助。

 类似资料:
  • 我刚刚开始学习LaravelV3,我试图通过创建一个博客来了解eloquent的一对多关系。我的帖子与类别有多对一的关系(每个帖子都链接到一个类别)。 我有以下表格和以下字段: 帖子:id、标题、正文、创建日期、类别id 类别:id、名称 我有以下两种型号: 我想出了如何通过传递类别id来获得所有帖子: 我只是需要帮助,找出如何获得所有的职位,并得到他们的更正类别。因此,在视图中的一天结束时,我可

  • 我有帖子表和评论表。我想得到所有的帖子与它的评论和以下返回只是帖子有评论: 更新 例如 ID帖 1个职位1 2后2 id post\u id评论 1萨姆勒大学评论 Post::with('comments')只返回有注释的帖子,它只返回第一篇帖子,因为第二篇帖子没有注释,我想获取所有帖子(有注释或没有注释)

  • 我正在使用Laravel 5创建一个博客,但我对多对多(通过透视表)关系有一个奇怪的问题。我的DB设置如下: 文章表: id|bigint|20|PK|不为空|自动增量 title|varchar|255|不为空 body|text|不为空 category_id|bigint|20|不为空 created_at|时间戳|不空 updated_at|时间戳|非空 已发布|布尔值|非空 delete

  • 在我的应用程序中,我更新了从一对多到多对多的关系,我试图找出一种持久化关联功能的方法。 假设我有两个相关的表,例如狗和主人。如果我有一系列的主人,并且我正试图为这些主人获取一份狗的id列表,我应该如何雄辩地做到这一点? 这里也提出了类似的问题:https://laracasts.com/discuss/channels/laravel/getting-many-to-many-related-da

  • 我试图通过使用Laravel Eloquent获得数据,但我无法访问。无论何时尝试,它都显示尝试获取非对象的属性“name” 我有两个模型。类别和文章。类别有许多文章。以下是模型: 类别模型 文章模式 物品管理员 查看刀片(admin.article.pending) 在这里的刀片,我不能访问类别通过雄辩的属于功能,我没有得到背后的原因得到的消息: ErrorException(E_ERROR)试

  • 我有许多对许多用户与城市地区之间的联系。我也有连接城市区域的区域(一个城市区域只能连接一个区域)。 我有这样的数据库结构: 使用者 id 城市地区 id 姓名 area_id 城市用户 id cityarea_id user_id 地区 id 姓名 接下来我有模特 用户 城市地区 地区 问题: 如何让所有用户与雄辩? 谢谢!!