目前我有两个表,一个典型的主表-详细信息,我要从详细信息表[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,我想要的是分组。关闭是不正确的;)
答案 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
是否是主表和明细表之间的唯一列名。