0
我是Laravel 5的初學者,我試着開發一個博客,假設我有一個Article模型,它與Tag模型有許多關係。如何根據數據透視表中的屬性來統計數據量?
這是文章的模型:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Article extends Model {
protected $fillable = [
'name',
'description'
];
public function tags() {
return $this->belongsToMany('App\Tag')->withTimestamps();
}
}
這是標籤型號:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Tag extends Model {
public function articles() {
return $this->belongsToMany('App\Article')->withTimestamps();
}
}
下面是文章表遷移和Article_Tag透視表:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateArticlesTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('articles', function(Blueprint $table)
{
$table->increments('id');
$table->string('name')->unique();
$table->text('description');
$table->timestamps();
});
Schema::create('article_tag', function(Blueprint $table)
{
$table->integer('article_id')->unsigned()->index();
$table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade');
$table->integer('tag_id')->unsigned()->index();
$table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('article_tag');
Schema::drop('articles');
}
}
這是標籤表的遷移:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTagsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tags', function(Blueprint $table)
{
$table->increments('id');
$table->string('name')->unique();
$table->integer('count')->unsigned();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('tags');
}
}
可以說,我有3個標籤在我的數據庫中,「生活方式」,「社會」,「經濟」。
假設一篇文章是用標籤「生活方式」創建的,然後在ArticleController中,在商店功能中,我希望將「生活方式」標籤的count屬性設置爲數據庫中文章的數量在這種情況下,它將從數據透視表中計數),使用count()函數生成具有「生活方式」標籤的數據。
如果TAG_ID是在文章表,我可以做這樣的控制器:
$article = new Article($request->all());
$article->save();
foreach($article->tags as $tag) {
$tag->count = Article::where('tag_id', $request->tag_id)->count();
$tag->save();
}
但在這種情況下,其中的功能推遲到透視表中的一列,我有不知道該怎麼做。
我的初學者的錯誤的任何解決方案?提前致謝。
哇,它的工作。從來沒有想過這麼簡單。謝謝你,你做了我的一天。 :d – Fernando