Ця помилка не має безпосереднього відношення до Laravel, та зявляється завжди, коли ви намагаєтесь використати масив в якості стрічки без явної конвертації. Але в Laravel в можете побачити цю помилку у двох випадках: безпосередньо при використанні масива в там де треба стрічка, а також якщо ви не налаштували правлиьне перетворення типів для полей моделі.
В цій статті я покажу як виправити помилку array to string conversion exception в Laravel якщо це сталось при роботі з моделю, а також як правильно зберегти вміст масиву в стрічку.
Виправлення помилки в моделі
Давайте уявимо, що у вас є модель Project, а у неї є поле settings, в яке ви хочете записати массив налаштувань. Наприклад:
app/Http/Controllers/NewProjectController.php$project = new \App\Models\Project();
$options = [
"option_1" => true,
"option_2" => false,
"option_3" => false,
];
$project->name = "Test";
$project->settings = $options;
$project->save();
Якщо ви виконаєте такий код то отримаєте помилку на виклику методу save():

Початківцям може бути важко знайти причину цієї проблеми, тому що виключення вказує на виклик методу save() для моделі і важко зрозуміти де саме сталась помилка. За замовучуванням всі поля моделі вважаються стрічками. Якщо ви хочете записати в них масив, то ви можете сконвертувати його в стрічку як описано нижче за допомогою json_encode() або print_r(). Але це не дуже зручно. Eloquent може автоматично конвертувати поля в стрічку при збереженні в базу данних, а потім відновлювати їх тип при читанні моделі з бази данних за допомогою механізму casts. Для цього додайте змінну $casts для вашої моделі з описом перетворень. Наприклад:
app/Models/Project.phpprotected $casts = [
'settings' => 'array'
];
Також ви можете додати значення за замовчуванням для цього поля:
app/Models/Project.phpprotected $attributes = [
'settings' => '[]'
];

Зверніть увагу, що значення за замовчуванням має бути стічкою в форматі JSON, інакше ви отримаєте таку ж саму помилку.
На рівні бази данних для збереження масивів і інших обєктів краще за все використовувати поле json або jsonb. Але якщо хочете, ви можете використовувати varchar. У будь-якому випадку після налаштування casts ви зможете читати і записувати данні в це поле без помилок.
Конвертація масиву в стрічку
Як сказано вище, таку помилку можна отримати, якщо ви намагаєтесь використати масив, там де PHP очікує отримати стрічку. Якщо таке трапилось не випадково і вам дійсно треба зберегти масив як стрічку, то його варто конвертувати у стрічку. Для цього існують функціі implode() та print_r().
1. implode
Функція implode() приймає два параметри, перший це символ або стрічка, якою буду розділені елементи масиву, а другий сам масив. Наприклад:
conversion.php<?php
$array = ["one", "two", "three"];
$str = implode(",", $array);
var_dump($str);

Але ця функція може працювали лише з одновимірними масивами. Якщо в масиві знаходиться ще декілька масивів, то нічого не вийде. Тому варто зразу подивитись що знаходиться в масиві, який ви збираєтесь конвертувати. Для цього можна скористатись функцією dump() ибо dd(). Наприклад, якщо ви передасте в implode() наступний масив, то теж отримаєте помилку array to string conversion:
conversion.php<?php
$array = [
"first" => ["one", "two", "three"],
"second" => ["four", "five", "six"],
];
$str = implode(",", $array);

Універсального рішення, як сконвертувати такий масив в стрічку немає. Якщо його потрібно зберегти просто для перегляду людиною, то можна скористатись функцією print_r().
2. print_r
Зазвичай функція print_r() застосовується для виводу значення змінної в браузер або консоль. Найчастіше це використовується для відладки коду. Але якщо в другий параметр цієї функції передати true, то вона виведе вміст будь-якої змінної, в тому числі масиву в стрічку. Таким чином масив показаний вище може бути перетворений в стрічку за допомогою такого коду:
conversion.php<?php
$array = [
"first" => ["one", "two", "three"],
"second" => ["four", "five", "six"],
];
$str = print_r($array, true);
var_dump($str);

3. json_encode
Якщо ж ви хочете щоб стрічку з масивом у майбутньому можна було конвертувати назад в масив, то потрібно перетворити його в JSON за допомогою функції json_encode(). Ця функція серіалізує всі обєкти які знаходяться в масиві окрім ресурсів. Наприклад:
conversion.php<?php
$array = [
"first" => ["one", "two", "three"],
"second" => ["four", "five", "six"],
];
$str = json_encode($array);
var_dump($str);

Далі ви можете знову отримати масив за допомогою функції json_decode(). Також замість json можна використовувати serialize() та unserialize().
Висновки
В цій короткій статті я показав як виправити array to a string conversion в Laravel при роботі з моделями, а також як конвертувати масив в стрічку за допомогою implode() або print_r(). Як бачите, це доволі просто.