私のnewb質問をお詫び申し上げます。この質問は主に、Laravelの多対多の関係についての私の頑固な不足が原因です。Laravelのピボットテーブルに画像タグを保存する
私のサイトで、ユーザーは、ユーザーが自分で作成したタグを伴う画像
$images = new Images;
...
$images->save();
をアップロードすることができます。これらのタグは配列として格納され、検証され、タグが存在するかどうかがチェックされます。タグが存在する場合は、新しいイメージをそのタグに関連付けるエントリを 'tagmap'に追加します。それが存在しない場合、私は同じことが起こることを望むだけでなく、新しいタグを作成する必要があります。
私は、3つのテーブル、イメージテーブル、タグテーブル、および 'tag_id'というカラムを持つ 'tagmap'というピボットテーブルを持っています。だから、
画像が保存された後:私は悩みを抱えているところ
$tags = new Tag;
foreach ($request->tags as $tags) {
if(preg_match('/^[a-zA-Z]+[a-zA-Z0-9._]+$/', $tags)) {
if (strlen($tags) < 21) {
if (Tag::where('tagname', $tags)->count() > 0) {
//store tag_id and image_id association on 'tagmap' table, no need to create new tag because tag exists
} else {
//create new tag on the 'tags' table
//store tag_id and image_id association on 'tagmap' table
}
} else {
return redirect()->back()->with('info', 'Tags may only contain 20 characters.');
}
} else {
return redirect()->back()->with('info', 'Tags may only contain letters and numbers, and must start with letters.');
}
}
$tags->save();
コメントアウトセクションがあります。ここで
は私のタグのモデルである:私が持っている
class Tag extends Model {
protected $table = 'tags';
protected $fillable = [
'tagname',
];
public function Images() {
return $this->belongsToMany('CommendMe\Models\Images');
}
}
と私のイメージでモデル:
class Images extends Model {
protected $table = 'images';
public function tags() {
return $this->belongsToMany('CommendMe\Models\Tag');
}
}
任意の助けをいただければ幸いです!
奇数を:あなたは既存の関係を破壊したくない場合は
また、あなたは
syncWithoutDetaching()
メソッドを使用することができます。なぜimage_tagsではなくimage_tagですか?また、なぜ$ images-> tags()の代わりに$ image-> tags()を使用するのですか?私はすでに$ images = new Imagesをしました。なぜそれが$画像になるのですか?ここで行われている構文は非常に混乱しています。 –@FelixMaxime Laravelは、テーブル名の関連付けプロセスを自動化します。モデル間の特異な名前を探します。この場合、単数形の画像は画像であり、単数形のタグはタグです。また、アルファベット順に表示されます。この場合、 'image_tag'が必要です。 – Ohgodwhy