首页 > 解决方案 > 如何以 Laravel Eloquent 方式获取数据

问题描述

我有 2 张桌子。

现在,我只需要一个“出版商名称”和“每个出版商下所有项目的计数”。

我可以通过使用传统方式的简单连接来做到这一点。但我是 Laravel 的新手,想用 eloquent 来实现这一点。

请帮忙,谢谢:)

标签: laravel

解决方案


只是改进@mrhm 解决方案:

在模型中创建items关系Publisher

public class Publisher
{
    public function items()
    {
        return $this->hasMany(Item::class);
    }
}

在模型中创建publisher关系Item

public class Item
{
    public function publisher()
    {
        return $this->belongsTo(Publisher::class);
    }
}

下面的关系返回发布特定帖子的发布者。

现在,要获取发布者名称、统计所有发布者帖子并获取特定发布者在过去 24 小时内发布的所有帖子,您可以执行以下操作:

// Within some controller:
public function getData($publisherId)
{
    $publisher = Publisher::find($publisherId);
    $name = $publisher->name;
    $publisherPosts = $publisher->items;
    $countAllPosts = $publisher->items->count();
    $postsPast24Hours = $publisher->posts()->where('created_at', '>=', Carbon::now()->subDay());
}

如果您想要所有发布者的所有帖子,请使用以下命令:

// Within some controller:
public function getData()
{
    $data = [];
    $publishers = Publisher::all();
    foreach($publishers as $publisher) {
        $data[] = [
            'name'             => $publisher->name,
            'posts'            => $publisher->items,
            'postsPast24Hours' => $publisher->posts()->where('created_at', '>=', Carbon::now()->subDay()),
            'countPosts'       => $publisher->items->count(),
        ];
    }
    return $data;
}

不要忘记导入 Carbon、Item 和 Publisher。

希望能帮助到你。


推荐阅读