#php #sql #laravel #eloquent
Вопрос:
здравствуйте, я использую laravel 8, у меня есть таблица продуктов и изображений, и я хочу иметь возможность загружать по 3 изображения с каждым продуктом
модель продукта
class Product extends Model implements Auditable
{
use HasFactory, AuditableTrait;
const FILLABLE = ['name','price','description'];
protected $fillable = ['name','price','description'];
public function images()
{
return $this->hasMany(Image::class, 'id');
}
}
миграция продукта
class CreateProductsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->double('price');
$table->text('description');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('products');
}
}
модель изображения
class Image extends Model
{
use HasFactory;
protected $fillable = ['product_id', 'file_path'];
}
миграция изображений
class CreateImagesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('images', function (Blueprint $table) {
$table->id();
$table->foreignId('product_id')->constrained();
$table->string('file_path');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('images');
}
}
и это метод внутри моего контроллера продукта, который должен хранить данные
public function store(Request $request)
{
$product = Product::create($request->only('name','price','description'));
if($images = $request->file('images')){
foreach($images as $image){
$image->store('product','public');
Image::create([
'product_id' => $product->id,
'file_path' => $image->hashName()
]);
}
}
return $product;
}
когда я тестировал этот метод с почтальоном, я смог сохранить данные в продукте
, но таблица изображений остается пустой, она не получала никаких данных
, никакой помощи!
Комментарии:
1. Вы пробовали вести журнал? Сохранены ли изображения?
2. @KevinBui нет, когда я
dd($request->all()
показываю всю информацию о продукте и изображении, когда я вручную добавляю данныеreturn Product::with('images')->get();
в запрос get, я получаю продукт с изображением, связанным с ним
Ответ №1:
Используйте следующий код:
public function store(Request $request)
{
$product = Product::create($request->only('name','price','description'));
if($images = $request->file('images')){
foreach($images as $image){
$image->store('product','public');
$product->images()->create([
'product_id' => $product->id,
'file_path' => $image->hashName()
]);
}
}
return $product;
}
Комментарии:
1. загрузка изображения не прошла
2. О, извините, я пропустил вызов связи изображений (). Пожалуйста, попробуйте обновить код прямо сейчас
3. $продукт->изображения()->>создать([ ‘product_id’ =>>> $продукт->>>>идентификатор, ‘путь к файлу’ =>>>>> $изображение->>>> > >Хэш-имя() ]);
4. он не был загружен, можете ли вы связаться со мной из этого, чтобы объяснить больше и увидеть полный код , прошло уже два дня
5. Пожалуйста, замените строку 48 в ProductController.php с этой строкой:
$product->images()->create([