База данных Laravel sql
У меня проблема с SQL. Я не понимаю, где я не прав. Я создал группу похожих файлов, и это работает. В этой группе это говорит мне, что label_winner
не существует. Но я сгенерировал winner_label
миграция потому что она инвертирует?
Illuminate \ Database \ QueryException (42S02) SQLSTATE[42S02]: Base table or view not found: 1146 Table 'canoa.label_winner' doesn't exist (SQL: insert into `label_winner` (`created_at`, `label_id`, `updated_at`, `winner_id`) values (2018-12-18 23:41:09, 3, 2018-12-18 23:41:09, 3))
Миграция winner_label
public function up()
{
Schema::create('winner_label', function (Blueprint $table) {
$table->increments('id');
$table->integer('winner_id');
$table->integer('label_id');
$table->timestamps();
});
}
Миграционная дисциплина_победитель
public function up()
{
Schema::create('discipline_winner', function (Blueprint $table) {
$table->increments('id');
$table->integer('winner_id');
$table->integer('discipline_id');
$table->timestamps();
});
}
Миграционный победитель
public function up()
{
Schema::create('winners', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->string('title');
$table->string('slug')->unique();
$table->string('image')->default('default.png');
$table->text('body');
$table->integer('view_count')->default(0);
$table->boolean('status')->default(false);
$table->boolean('is_approved')->default(false);
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
$table->timestamps();
});
WinnerController
public function store(Request $request)
{
$this->validate($request,[
'title' => 'required|unique:winners',
'image' => 'image',
'disciplines' => 'required',
//'labels' => 'required',
'body' => 'required',
]);
$image = $request->file('image');
$slug = str_slug($request->title);
if(isset($image))
{
// make unipue name for image
$currentDate = Carbon::now()->toDateString();
$imageName = $slug.'-'.$currentDate.'-'.uniqid().'.'.$image->getClientOriginalExtension();
if(!Storage::disk('public')->exists('winner'))
{
Storage::disk('public')->makeDirectory('winner');
}
$winnerImage = Image::make($image)->resize(1600,1066)->stream();
Storage::disk('public')->put('winner/'.$imageName,$winnerImage);
} else {
$imageName = "default.png";
}
$winner = new Winner();
$winner->user_id = Auth::id();
$winner->title = $request->title;
$winner->slug = $slug;
$winner->image = $imageName;
$winner->body = $request->body;
if(isset($request->status))
{
$winner->status = true;
}else {
$winner->status = false;
}
$winner->is_approved = true;
$winner->save();
$winner->disciplines()->attach($request->disciplines);
$winner->labels()->attach($request->labels);
Toastr::success('Post Successfully Saved :)','Success');
return redirect()->route('admin.winner.index');
}
2 ответа
Проблема в модели таблицы Winner_label. Когда вы запускаете запрос, laravel получает имя таблицы из модели. Вы должны назвать модель с правильным синтаксисом. Альтернатива - установить имя таблицы в эталонной модели.
protected $table = 'winner_label';
Я обнаружил, что ошибка генерируется этим
<div class="form-group">
<label>Select Labels</label>
<select class="form-control select2" name="labels[]" id="label" data-live-search="true" multiple="multiple">
@foreach($labels as $label)
<option value="{{ $label->id }}">{{ $label->name }}</option>
@endforeach
</select>
</div>