2016-05-10 9 views
0

laravel-taggingを設定しようとしていますが、これはLaravelの最も一般的なタグ付けシステムです。しかし残念なことに、フロントエンドの機能はありません。 guideがあり、私は完全にそれを辿っています。タグを作成しようとしている間に終わり、私はエラーに遭遇:整合性制約違反:1048列 'taggable_id'はnullにはできません

SQLSTATE [23000]:整合性制約違反:1048カラム 'taggable_idは、' SQL(nullにすることはできません。tagging_taggedtag_nametag_slugに挿入、taggable_typetaggable_id)私は、人々は、このようなthisthisthisと同様のエラー、に走ったいくつかの他の記事を見つけました (チーズ、チーズ、アプリケーション\リンクス、))

値。しかし、いずれも決定的な解決策を提供していません。人々、そして常識では、taggable_idを含むモデルは、タグがデータベースに格納されるように保存する必要があると言います。私の場合$link->save();を使用して、それを保存する私の試みは動作しません

public function storeStuff(Request $request) 
{ 
    // Create the link first 
    $link = new Links; 

    // Now add tags 
    $link->tag(explode(',', $request->tags)); 

    // Try to save tags? 
    $link->save(); 
} 

:コントローラのための私のコードは次のようになります。私はまだtaggable_id列を含む同じエラーと私のデータベーステーブルtagging_taggedを取得し、まだヌルでいっぱいです。誰もこの問題にアプローチする方法についてアドバイスをしていますか?

EDIT:私はそれがトビアス・カールソンによって示唆されているように保存別を追加することによって動作するようになった:

$link = new Links; 
    $link->tag_name = $request->tags; 
    $link->save(); 

    // Now add tags 
    $link->tag(explode(',', $request->tags)); 

    $link->save(); 

私もcreated_atエラーが不足し修正するためにタイムスタンプを追加する必要がありました。タイムスタンプは、laravel-taggingパッケージに付属している初期移行には含まれていませんが、タグに便利かどうかはわかりません。私tagging_tagged表には次のようになります。

FIELD   TYPE    NULL KEY 
id   int(10)unsigned NO  PRI  auto_increment 
taggable_id int(10)unsigned NO  MUL  
taggable_type varchar(255)  NO  MUL  
tag_name  varchar(255)  NO   
tag_slug  varchar(255)  NO  MUL  
created_at timestamp   YES   
updated_at timestamp   YES   

私はまだタグを自動入力するにはJavascriptを取得しようとしています。私はそれがすべて働いたら、この質問を更新します。

+0

私は 'taggable_id'は外部キーだと思いますし、同じものに対してNULLデータを入力することはできません。したがって、制約を削除するか、その列の値を追加してください。 – prava

+1

'taggable_id'は主キーですか?次のSQLクエリの出力を貼り付けることができます: 'DESCRIBE tagging_tagged' – dimlucas

+1

基本的に' id'を持たないリソースにタグ付けしようとしています。 IDを取得するには、まずそれを保存してからタグを追加する必要があります。 –

答えて

2

モデルを保存してからタグを設定してから、もう一度保存する必要があります。

$link = new Links; 
$link->someProperty = $request->someProperty; 

// Save model to get a taggable_id (model id). 
$link->save(); 

// Now add tags 
$link->tag(explode(',', $request->tags)); 

// Save tags. 
$link->save(); 
1

テーブル構造内でtaggable_idにDEFAULT NULLを設定する必要があります。そうしないと、このようなクエリでNULLを追加する必要があります。

insert into tagging_tagged (tag_name, tag_slug, taggable_type, taggable_id) values (Cheese, cheese, App\Links, NULL) 
関連する問題