Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Бьюсь голой уже несколько суток, помогите решить ребус
http://prntscr.com/fbl0e1 структура БД
Модель один
class Dish extends Model
{
protected $table = 'dishes';
protected $fillable = ['name', 'specification', 'recipe'];
public function ingredients()
{
return $this->belongsToMany('App\Ingredient','dish__ingredients')
->withPivot(['quantity', 'units_id'])
->withTimestamps();
}
}
Модель два
class Ingredient extends Model
{
protected $table = 'ingredients';
protected $fillable = ['name'];
public function dishes()
{
return $this->belongsToMany('App\Dish','dish__ingredients');
}
public function units()
{
return $this->hasOne('App\Unit');
}
}
Модель три
class Unit extends Model
{
protected $table = 'units';
protected $fillable = ['name'];
public function ingredients()
{
return $this->belongsTo('App\Ingredient');
}
}
принимаю из формы массивы информации, как мне их записать в таблицу что бы связать? ((
$dish = Dish::FirstOrCreate([
'name' => $request['name_recipe'],
'specification' => $request['receiptComment'],
'recipe' => $request['receipt_description']
]);
foreach ($_POST['ingr'] as $v) {
$ingr[] = Ingredient::FirstOrCreate(['name' => $v])->id;
}
foreach ($_POST['unit'] as $v) {
$unit[] = Unit::FirstOrCreate(['name' => $v])->id;
}
$quan = $_POST['quantity'];
$dish->ingredients()->attach($ingr, ['quantity' => $quan[1], 'units_id' => $unit[1]]); // если записывать так то только одно значение записывается во всех полях, а мне нужно на каждой итерации новое СЛЕДУЩЕЕ значение этих массивов
$dish->ingredients()->attach($ingr)
withPivot добавлены поля для заполнения вторым параметром, если передавать строку все норм записывается только одна строка, а у меня массив данных
$dish->ingredients()->attach($ingr, ['quantity' => $quan, 'units_id' => $unit]) если $quan и $unit передать масивом будет ошибка Array to string conversion (понятно что нужно предать строку а не массив)
http://prntscr.com/fbl6kd
помогите пожалуйста
Не в сети
я одного не понимаю, зачем от юниты отдельная таблица и почему на каждую отдельную запись туда добавляются новые значения? там разве нету уже готового «справочника» возможных значений? если так то видимо в форме должен быть селект который выбирает варианты из справочника и тогда в $_POST['unit'] должны приходить айдишники уже существующих единиц измерения.
в этом случае у тебя будет только один цикл
foreach ($_POST['ingr'] as $key => $v) {
$dish->ingredients()->attach(
Ingredient::FirstOrCreate(['name' => $v]),
['quantity' => $_POST['quantity'][$key], 'units_id' => $_POST['unit'][$key]]
);
}
но у этого кода тоже есть недостаток – все получаемые данные должны извлекаться из объекта запроса, а не напрямую из $_POST, а их корректность должна проверяться стандартными или кастомными валидаторами
Не в сети
зачем от юниты отдельная таблица и почему на каждую отдельную запись
Эту таблицу мне тимлид утвердил
Не в сети
я одного не понимаю, зачем от юниты отдельная таблица и почему на каждую отдельную запись туда добавляются новые значения? там разве нету уже готового «справочника» возможных значений? если так то видимо в форме должен быть селект который выбирает варианты из справочника и тогда в $_POST['unit'] должны приходить айдишники уже существующих единиц измерения.
в этом случае у тебя будет только один цикл
foreach ($_POST['ingr'] as $key => $v) { $dish->ingredients()->attach( Ingredient::FirstOrCreate(['name' => $v]), ['quantity' => $_POST['quantity'][$key], 'units_id' => $_POST['unit'][$key]] ); }
но у этого кода тоже есть недостаток – все получаемые данные должны извлекаться из объекта запроса, а не напрямую из $_POST, а их корректность должна проверяться стандартными или кастомными валидаторами
про селект так и есть, но если я захочу сделать не селект а свободную форму... В общем самое главное я не пойму как как добавлять еще записи если dish id 1 а остальные записи много, через форыч?
Не в сети
foreach ($_POST['ingr'] as $key => $v)
а сколько циклов будет? разве не один? а мне 4 нужно
Не в сети
а сколько циклов будет? разве не один? а мне 4 нужно
можно в одном цикле сразу заполнять всю группу связанных значений
Эту таблицу мне тимлид утвердил
если у тебя есть тимлид – зачем тогда тут спрашивать? или он необщительный?
Не в сети
если у тебя есть тимлид – зачем тогда тут спрашивать? или он необщительный?
я на обучении
Не в сети
ну так и я о том же у тебя есть тимлид, которому платят в том числе и за то чтобы он тебя учил зачем вообще форум тогда нужен?
Не в сети
ну так и я о том же у тебя есть тимлид, которому платят в том числе и за то чтобы он тебя учил зачем вообще форум тогда нужен?
блин )) ну это не то что бы тимлид, нас пачку набралин ньюби, на всех время не уделять, самый смышленые остануться, не кто не кому не помогает....
скажи а что в $key - $_POST['unit'][$key]]?
Не в сети
скажи а что в $key - $_POST['unit'][$key]]?
присмотрись повнимательнее к foreach, $key – порядковый номер обрабатываемого элемента в первом массиве – к нему и подбираются по тому же номеру элементы из остальных массивов
Не в сети
скажи а что в $key - $_POST['unit'][$key]]?
присмотрись повнимательнее к foreach, $key – порядковый номер обрабатываемого элемента в первом массиве – к нему и подбираются по тому же номеру элементы из остальных массивов
супер получилось! как теперь выводить информацию из объединяющей таблицы. полную в формате
Рецепт
короткое описание
полный рецепт // эти три из таблицы dishes
ингредиент1 150 гр
ингредиент2 150 гр
ингредиент3 150 гр
ингредиент4 150 гр
Не в сети
Страницы 1