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

具有一条记录的Laravel/Octobercms负荷关系

孟树
2023-03-14

我有一个主表“设备”每个设备都与“设备日志”有一对一的关系

设备模型

class Device extends Model
{
    public $hasMany = [
        'devicelogs' => 'Myhome\Myplugin\Models\Devicelog'
    ];
}

DeviceLog模型:

class Devicelog extends Model
{
    public $belongsTo = [
        'device' => 'Myhome\Myplugin\Models\Device'
    ];
}

我想急切地加载设备关系,只有一个记录,以响应该关系的最新日志。

我试过做:

$d = Device::with([
    'devicelogs' => function ($query) {
        $query->latest('created_at')->limit(1)->get();
    }
])->get();

有了这个,我只得到一台设备,它的关系设备日志有一个最新记录。我希望所有设备都有一个设备日志。

我尝试了以下几点:

$d = Device::with([
    'devicelogs' => function ($query) {
        $query->first();
    }
])->get();

有了这个,我只得到一个设备,它的关系devicelogs有一条第一条记录。

当我这样做时:

$d = Device::with([
    'devicelogs' => function ($query) {
        $query->orderBy('created_at','desc');
    }
])->get();

我确实得到了所有设备加载的关系收集在desc顺序。但问题是我不想要整个设备,我只想要每个设备的最新/最后一个。

所以我试着做:

$d = Device::with([
    'devicelogs' => function ($query) {
        $query->orderBy('created_at','desc')->limit(1);
    }
])->get();

这同样只获取最新/最后一个设备日志,其中只有一个设备记录。rest所有设备获取空设备日志关系。

在记录中,每个设备至少有2个或更多devicelog。我想要的是,当我运行即时加载时,为每个设备返回一个和最后一个/最新的devicelog。

我不确定我到底哪里做错了。

共有1个答案

艾令秋
2023-03-14

有一种方法可以让你从中受益。在Laravel中,您只需定义一个新的关系并使其成为hasOne。

因为OctoberCMS仍然可以使用Laravel风格的关系方法。您可以执行以下操作:;

在您的设备中。php模型

public function latestDeviceLog()
{
    return $this->hasOne('Myhome\Myplugin\Models\Devicelog')->latest();
}

然后你可以访问与。

Device::with('latestDeviceLog')->get();
 类似资料:
  • 问题内容: 我有这样的一对一关系 父母 和孩子 } 我想创建返回具有孩子isNotNull的父母的条件,我尝试过像 但是没有用,请给我一个例子,能帮我吗?谢谢 问题答案: 首先,映射是错误的。在父类中,您是说该关联是由映射的,而在您说该关联是使用名为的连接列进行映射之后。下定决心 它是由属性映射的,应该删除。或者它是由JoinColumn映射的,您应该在子级中删除,并在Child实体中使用。 现在

  • 在我的网站中,我有用户、角色和权限。 每个用户属于多个角色(例如User.php)和称为“role_user”的数据透视表 每个角色都属于许多权限(例如Role.php)和名为“permission\u Role”的透视表 我想以某种方式访问用户权限,但我似乎无法弄清楚。基本上,我需要这样的东西在User.php 这可能吗?请帮忙。谢谢你。

  • > 在我的视图中,我可以输出,如下所示: 我可以遍历,比如: 但是是否可以迭代(我知道只有一个-- ,请参见#2),并且对于每个迭代他们的? 我想我的模特关系中有什么不对劲的地方。我还尝试用在Artist.php中定义关系(我认为说“每个艺术家都有许多乐器”更有意义,但这给了我一个错误,因为它需要一个名为的表,而且它还试图检索该表中不存在的列(比如)。

  • 问题内容: 我正在尝试获取“分组”记录的第一条记录和最后一条记录。 更准确地说,我正在执行这样的查询 但我想获得小组的第一和最后的记录。可以通过执行大量请求来完成,但是我的桌子很大。 是否有使用MySQL的方法(如果可能的话,可以减少处理时间)? 问题答案: 您要使用和: 这避免了昂贵的子查询,并且我发现对于这个特定问题它通常更有效。 请查阅手册中的两个函数以了解它们的参数,或访问本文,其中包含有

  • 训练负荷是对单个训练课用力程度的文字反馈。训练负荷的计算基于训练中关键能量源(碳水化合物和脂肪)的消耗。 训练负荷的特性,使得不同类型的训练课负荷彼此兼容。例如,您可以将长时间低强度骑行训练负荷与短时间高强度跑步训练课负荷进行比较。为了使训练之间的对比更准确,我们将您的训练负荷转化为预估恢复时间。 每次训练后,您都可以在Polar 应用程式的训练总结里看到您的训练负荷的说明。您可以在这里看到不同水

  • 考虑到Laravel指南中的基本示例有许多通过关系,我试图直接查询雄辩的、帖子类型为100的国家(只是一个例子)。 type_id是我的特例... 因此,我在country模型中创建了一个关系,通过用户创建了与帖子的关系。我想要实现的结果是列出一个国家,以及每个国家内由该国用户创建的帖子。 我能够以其他方式复制我想要实现的结果,但是我想知道为什么下面雄辩的查询没有返回预期的结果: 查询的返回是几个

  • 我有两张桌子如下 表1是父表,表2是子表。 如何在Oracle11g中创建连接来实现这一点。我使用sql navigator+

  • 我需要添加到我的关系字符串,像这样的格式:(帖子)和我需要从另一个表中获取的帖子(在这个关系中,我只有post_id)。我怎么能采取使用文件?