如何在laravel mysql中将单个选择中的选择值分组为数组?

问题描述

我正在尝试使用 eloquent 从查询获取此信息。

$data = [
    "user" => [
        "img_profile" => "profileimage","username" => "myusername"
    ],"description" => "postdescription","img" => "postimg"
];

我设法使用以下 PHP 代码得到了这个,但我想从查询中得到这个,有什么办法吗?

$posts = posts::join('business','posts.user_id','=','business.user_id')
    ->join('cities','business.city_id','cities.id')
    ->select(
        'posts.description as description','posts.img as img','business.name as name','business.img_profile as img_profile','business.username as username'
    )
    ->where('business.city_id',$city)
    ->inRandomOrder()
    ->limit('10')
    ->get();

foreach($posts as $post){
    $data[$i] = [
        "user" => [
            "username" => $post->username,"img_profile" => $post->img_profile
        ],"description" => $post->description,"img" => $post->img
    ];
    $i++;
}

解决方法

问题的关键在于您认为自己在使用 Eloquent,但实际上并非如此——您正在使用 Query Builder。 Eloquent 处理模型之间的关系,因此您无需考虑表格。如果您使用的是 join(),那么您就没有使用 Eloquent。

据我所知,您从 City 开始,选择与该城市相关的 Business,然后从 Post 中随机选择 10 个 Business?事情有点不清楚,因为您似乎使用了非常规的表名和列名,但希望这能让您知道从哪里开始。

第一步是建立关系;除了典型的“City 有很多Business”和“Business 有很多Post”之外,您还需要在 CityPost 像这样:

class City extends Model
{
    public function posts()
    {
        return $this->hasManyThrough(Post::class,Business::class);
    }
}

一旦这种关系就位,您应该能够通过以下方式获得您想要的东西:

$city = City::find($city_id);
$data  = $city
    ->posts()
    ->inRandomOrder()
    ->limit(10)
    ->with("business:id,name,img_profile,username")
    ->get();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...