Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 19.10.2021 07:53:07

Ошибка при записи в промежуточной таблице Array to string conversion

Всем доброго времени суток. Второй день бьюсь с проблемой. При создании записи таким вот образом:
$post = Post::create($data);
$post->tags()->sync($request->tags);
Выдает ошибку ErrorException Array to string conversion
Ниже прилагаю код модели, контроллера ну и вида на всякий.

class Post extends Model
{
    use HasFactory;
    use Sluggable;

    protected $guarded = [];

    public function sluggable(): array
    {
        return [
            'slug' => [
                'source' => 'title'
            ]
        ];
    }

    public function tags(){
        return $this->belongsToMany(Tag::class);
    }

    public function category(){
        return $this->belongsTo(Category::class);
    }
}
class Tag extends Model
{
    use HasFactory;
    use Sluggable;

    protected $guarded = [];

    public function sluggable(): array
    {
        return [
            'slug' => [
                'source' => 'title'
            ]
        ];
    }

    public function posts(){
        return $this->belongsToMany(Post::class);
    }
}

Контроллер Post

public function store(Request $request)
    {
        $request->validate([
            'title' => 'required',
            'category_id' => 'required|integer',
            'thumbnail' => 'nullable|image',
        ]);

        $data = $request->all();

        if($request->hasFile('thumbnail')){
            $folder = date('Y-m-d');
            $data['thumbnail'] = $request->file('thumbnail')->store("images/{$folder}");
        }

        $post = Post::create($data);
        $post->tags()->sync($request->tags);

        return redirect()->route('posts.index')->with('success', 'Запись успешно добавлена');
    }

Ну и фрагмент вида

<div class="form-group">
  <label for="tags">Тэги</label>
  <select name="tags[]" class="select2" multiple="multiple" data-placeholder="Выбор тэгов" id="tags" style="width: 100%;">
    @foreach($tags as $k => $v)
      <option value="{{ $k }}">{{ $v }}</option>
    @endforeach
  </select>
</div>

Не в сети

#2 19.10.2021 10:53:33

Re: Ошибка при записи в промежуточной таблице Array to string conversion

Решил проблему big_smile. Вместо метода create() сделал так:

public function store(Request $request)
    {
        $request->validate([
            'title' => 'required',
            'category_id' => 'required|integer',
            'thumbnail' => 'nullable|image',
        ]);

        $data = $request->all();

        if($request->hasFile('thumbnail')){
            $folder = date('Y-m-d');
            $data['thumbnail'] = $request->file('thumbnail')->store("images/{$folder}");
        }
        $post = new Post();
        $post->title = $data['title'];
        $post->description = $data['description'];
        $post->content = $data['content'];
        $post->published = $data['published'];
        $post->meta_keywords = $data['meta_keywords'];
        $post->meta_description = $data['meta_description'];
        if(isset($data['thumbnail'])){
            $post->thumbnail = $data['thumbnail'];
        }
        $post->category_id = $data['category_id'];
        $post->save();
        $post->tags()->sync($request->tags);

        return redirect()->route('posts.index')->with('success', 'Запись успешно добавлена');
    }

Не в сети

#3 25.11.2021 00:20:28

Re: Ошибка при записи в промежуточной таблице Array to string conversion

Привет! Я знаю откуда этот код)))) и у меня такая же ошибка. Твой метод помог!!! Только пару строчек убрал)) Спасибо!

Не в сети

Подвал раздела