Здравствуйте. Делаю блог на laravel. Пытаюсь сделать прикрепление изображений к записи через связанную таблицу, а все ссылки на фото хранятся в отдельной таблице. Выбираю через input type file изображение к записи , сохраняю и выходит sql ошибка: Код (Text): SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'test.png' for column 'image_to_article_id' at row 2 ( SQL: insert into `image_to_articles` (`image_id`, `image_to_article_id`) values (1, 0), (1, test.png), (1, image/png), (1, 1644), (1, 0), (1, )) Таблица `image_to_articles` связывает записи с изображением, а столбец `image_id` содержит id изображений из таблицы с изображениями, столбец `image_to_article_id` - id записи. Но laravel всю инфу о фото пытается записать, к тому же test.png это старое название фотки, а в переименованном виде фото успешно сохраняется несмотря на ошибку выше. Как можно исправить?
А твой код все должны телепатически смотреть? Исходи из того, что в Laravel всё правильно написано, ошибка у тебя где-то.
Код контроллера сохраняющий запись: PHP: <?php namespace App\Http\Controllers\Admin; use App\Article; use App\Category; use App\Image; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class ArticleController extends Controller { /* .... */ public function store(Request $request) { $article = Article::create($request->all()); if($request->input('categories')) : $article->categories()->attach($request->input('categories')); endif; if($request->file('images')): $imageName = time() . '.' . $request->file('images')->getClientOriginalExtension(); $request->file('images')->move(public_path('images'), $imageName); $article->images()->attach($imageName); endif; return redirect()->route('admin.article.index'); } /* .... */ } Сейчас sql ошибка такая : Код (Text): SQLSTATE[01000]: Warning: 1265 Data truncated for column 'image_to_article_id' at row 1 (SQL: insert into `image_to_articles` (`image_id`, `image_to_article_id`) values (1, 1530966556.png)) Раньше в метод attach() передавался $request->file('images') , а сейчас так $article->images()->attach($imageName); Модель Image: PHP: <?php namespace App; use Illuminate\Database\Eloquent\Model; class Image extends Model { protected $fillable = ['image', 'miniature']; public function articles() { return $this->belongsToMany('App\Article', 'image_to_articles', 'image_to_article_id', 'image_id'); } }
Ну ты слишком много от Laravel хочешь Читай, что такое belongsToMany (кстати, нафига тебе многие ко многим здесь? Одну и ту же картинку хочешь к разным статьям крепить?). В Attach должна идти модель, а не строка, ты хочешь, чтоб Laravel твои мысли прочитал, и определил, в какое поле таблицы записать $imageName?
Метод attach крепит экземпляр одной модели к другой. Ты передаёшь туда строку (Laravel без понятия, что у тебя там изображение, и, по ходу, обнаружив скаляр вместо объекта, думает что это id другой модели)
понятно. можете подсказать чем заменить attach и associate , когда отношение hasMany и hasOne? я новичок в ларавел
А мне обязательно сюда документацию перепечатывать? Сам почитать никак не можешь? http://laravel.com/docs/master, где-то была на русском, кажется на laravel.su, но я не пользуюсь, я читаю по-английски