У меня 2 таблицы: - items
и groups
Объединение нескольких запросов отношения в одном - Laravel
groups
таблица, как показано ниже: -
create table groups (`id` int unsigned not null auto_increment,
`group_name` varchar(255),
primary key(`id`)
);
items
таблицу следующим образом: -
create table items (`id` int unsigned not null auto_increment,
`group_for` int unsigned not null,
`item_name` varchar(255),
primary key(`id`),
key `group_for` (`group_for`),
constraint `fk_group_for` foreign key (`group_for`)
references `groups`(`id`)
У меня ниже двух красноречивых методов: -
class Item extends \Eloquent {
// Add your validation rules here
public static $rules = [
// No rules
];
// Don't forget to fill this array
protected $fillable = ['group_for', 'item_name'];
public function divGet() {
return $this->belongsTo('group', 'group_for', 'id');
}
}
Группа красноречивы
class Group extends \Eloquent {
// Add your validation rules here
public static $rules = [
// No Rules.
];
// Don't forget to fill this array
protected $fillable = ['group_name'];
public function items() {
return $this->hasMany('item', 'group_for', 'id');
}
}
Теперь я бегу ниже запроса: -
$groupItem = array()
// Fetching all group row
$gGroup = Group::all();
// Checking if there is not 0 records
if(!is_null($gGroup)) {
// If there are more than 1 row. Run for each row
foreach($gGroup as $g) {
$groupItem[] = Group::find($g->id)->items;
}
}
Как вы можете видеть выше, если у меня есть 10 групп, чем, Group::find.....->items
запрос будет работать 10 запросов. Могу ли я объединить их в 1 запросе на все более 1 записи Group::all()
?
Это не возвращать данные группы как «имя группы», он вернулся только все «список элементов». Я также хочу иметь групповые данные, такие как «имя группы» с их списком элементов. –
Не могли бы вы уточнить? Это делает то же самое, что и ваш код. И переменная '$ group' имеет ваши данные группы –
Да, вы правы, но в моем случае у меня есть другой сценарий, Я имею в виду. группа, которая имеет id - '1', имеет имя« stackoverflow »и имеет элементы' a', 'b',' c'. Поэтому он возвращает только '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. Получение только 'a',' b', поскольку массив затрудняет понимание, к которому относятся 'id' или' group name'. Надеюсь, ты понял? в моем запросе выше, я могу сохранить другой массив данных группы. Но в вашем запросе я не могу получить данные «группы». –