如何通过id的Laravel数组获取列表的记录

时间:2018-11-17 03:35:39

标签: php laravel laravel-5

目前我有两个表,一个典型的主表-详细信息,我要从详细信息表[1,2,3,4,5,...]中获取一个ID数组,据此,我要生成该ID分组以获取由主分组的详细信息

大师

SqlConnection sqlConnection = new SqlConnection(Connection.connectionString)
sqlConnection.Open();

SqlCommand cmd = new SqlCommand(null, sqlConnection);
cmd.CommandText = "INSERT INTO IngredientTypes (Name) VALUES (@name)";

SqlParameter nameParam = new SqlParameter("@name", SqlDbType.Text, 155);
nameParam.Value = Name;
cmd.Parameters.Add(nameParam);

cmd.Prepare();
cmd.ExecuteNonQuery();

详细信息

CREATE TABLE IngredientTypes
(
    IngredientTypeID INT IDENTITY(1,1) PRIMARY KEY,
    Name VARCHAR(155)
);

Id的public function details() { return $this->hasMany('App\Models\Detail', 'detail_id'); }

我尝试获得结果,但未将其分组

public function master()
{
    return $this->belongsTo('App\Models\Master', 'master_id');
}

我的问题,这不是重复的问题,导致该问题的原因是获取我们已经拥有的ID,我想要的是分组。关闭是不正确的;)

1 个答案:

答案 0 :(得分:0)

总而言之,我不相信Eloquent支持groupBy(您必须编写自己的查询);并且您没有将所有列分组。

您的查询未修改要选择的列,因此laravel将为selecting all of them;因此,像您的ID这样独特的东西将分解各个组。您需要明确选择要启用组的内容,或者明确总结其他列的方式。

docs上的示例均显示了自定义的选择查询,但专门在“ groupBy / Having”标题下的查询除外,这很可能是文档的失败。

但是请注意其他示例,例如本示例,该示例将分组功能应用于所有选定的列:

$users = DB::table('users')
             // count is a grouping function; status is grouped below
             ->select(DB::raw('count(*) as user_count, status'))
             ->where('status', '<>', 1)
             ->groupBy('status')
             ->get();

正在将您真正想要的分组吗?分组汇总表,例如按提供的总数或计数或唯一的“名称”。如果是这样,则需要像上面的示例一样手动修改查询。

如果您只想按“名称”对它们进行排序(即将它们分组在一起),则需要orderBy函数。在这种情况下,您可以按以下方式修改代码:

return Detail::whereIn('id', $array)
    ->with('master')
    ->groupBy('name')
    ->get();

虽然我认为这里无关紧要,但您不妨考虑一下name是否是主表和明细表之间的唯一列名。