SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «blogpost_post_id» в «списке полей» - PullRequest
0 голосов
/ 13 мая 2018

Я озадачен использованием Pivot Table на Laravel. Я прочитал несколько подобных постов без успеха.

Я полный новичок. Вот сообщение, которое у меня есть.

SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец 'blogpost_post_id' в 'списке полей' (SQL: вставить в blogpost_blogtag (blogpost_post_id, blogtag_tag_id) значения (1, 2))

Проблема довольно проста. Laravel добавляет имя таблицы перед именем столбца, и я не могу понять, почему.

Laravel вызывает blogpost_post_id, тогда как имя столбца просто post_id Laravel вызывает blogtag_tag_id, тогда как имя столбца просто tag_id

Модели

Blogpost.php

public function blogtags(){

    return $this->belongsToMany('App\Blogtag');
}

Blogtag.php

public function blogposts(){

    return $this->belongsToMany('App\Blogpost');
}

I've also declared in the **Postcategory.php** model the following

public function blogposts()
{
    return $this->hasmany('App\Blogpost');
}

Таблицы:

таблица блога

public function up()
{
    Schema::create('blogposts', function (Blueprint $table) {
        $table->increments('post_id');
        $table->integer('post_editorid')->default(0);
        $table->string('post_title');
        $table->string('post_slug');
        $table->text('post_content');
        $table->integer('post_categoryid');
        $table->boolean('post_banned')->default(0);
        $table->integer('post_moderatorid')->default(0);
        $table->dateTime('post_bandate')->nullable($value = true);
        $table->string('post_picture')->nullable($value = true);
        $table->string('post_extlink')->nullable($value = true);
        $table->softDeletes();
        $table->timestamps();
    });
}

Таблица подкатегорий

public function up()
{
    Schema::create('postcategories', function (Blueprint $table) {
        $table->increments('cat_id');
        $table->string('cat_name')->unique();
        $table->timestamps();
    });
}

Таблица блогов

public function up()

{
    Schema::create('blogtags', function (Blueprint $table) {
        $table->increments('tag_id');
        $table->string('tag_kw')->unique();
        $table->timestamps();
    });
}

И таблица PIVOT

публичная функция up ()

{
    Schema::create('blogpost_blogtag', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('post_id');
        $table->integer('tag_id');
        $table->timestamps();
    });
}

И контроллер (магазин)

магазин публичных функций (Request $ request) { // дд ($ request-> все ());

$this->validate($request, [
    'posttitle' => 'required|min:4|max:255|string',
    'postcontent' => 'required|min:30|max:3000|string',
    'postpict' => 'nullable|image',
    'post_categoryid' => 'required',
    'postlink' => 'nullable|max:255|string',
    'blogtags' => 'nullable',

]);

    if ($request->hasFile('postpict')) {

        $postpict = $request->postpict;
        $postpict_new_name = time().$postpict->getClientOriginalName();
        $postpict->move('uploads/postpicts/', $postpict_new_name);
        $picturl = 'uploads/postpicts/' . $postpict_new_name;
    }else{
        $picturl = NULL;
    }

        $blogpost = Blogpost::create([
            'post_title' => $request->posttitle,
            'post_content' => $request->postcontent,
            'post_categoryid' => $request->post_categoryid,
            'post_picture' => $picturl,
            'post_extlink' => $request->postlink,
            'post_slug' => str_slug($request->posttitle)

        ]);

$blogpost->blogtags()->attach($request->blogtags);

$messageposttitle = $request->posttitle;
$message = $messageposttitle . ' is successfully stored';
$title = '';
Toastr::success($message, $title, ["positionClass" => "toast-top-center"]);

return redirect()->back();

}

$ blogpost-> blogtags () -> присоединять ($ request-> blogtags);

Я буду рад узнать о допущенной мной ошибке.

1 Ответ

0 голосов
/ 13 мая 2018

Попробуйте использовать пользовательский внешний ключ

Blogpost.php

    public function blogtags(){
       return $this->belongsToMany('App\Blogtag','blogpost_blogtag','post_id','tag_id');
    }

Blogtag.php

public function blogposts(){

    return $this->belongsToMany('App\Blogpost','blogpost_blogtag','tag_id','post_id');
}
...