ピボットテーブルと特定の機能のベストプラクティスに関する非常に基本的な質問があります。本質的にはピボットテーブルは最適なソリューションですか?
、私は2つのエンティティ
プレーヤー 質問
私はプレイヤーに質問を表示し、彼らは答えるとき、私は彼らが答えた場合に応じて、ポイントかどうかを報いるためイベントを発生さを持っています正しくないか。私が今したいのは、プレイヤーが何の質問に答えたかを格納するテーブルを作成することです。だから、私はプレイヤーを質問に関連付けることができます。
何かのように、
$player->question()->associate($question);
これはプレイヤーと質問の間に多くの関係に多くの上になります。ここ
私の質問は、しかし、このです:
は、私は、プレイヤーがコントローラに答えていない質問になって行くだろうか、これは実用性とスケーラビリティの面で最適なソリューションです、など。
基本的に
$player->questions();
の反対は、私が
UPDATE
モデル PlayerProfiles
<?php
namespace App\Models;
use App\Traits\Pointable;
use Illuminate\Database\Eloquent\Model;
use Prettus\Repository\Contracts\Transformable;
use Prettus\Repository\Traits\TransformableTrait;
/**
* Class PlayerProfiles
* @package App\Models
*/
class PlayerProfiles extends Model implements Transformable
{
use TransformableTrait, Pointable;
/**
* @var string
*/
protected $modelName = 'PlayerProfiles';
/**
* @var array
*/
protected $fillable = ['msisdn'];
/**
* @return string
*/
public function getModelName()
{
return $this->modelName;
}
public function questions()
{
return $this->belongsToMany('App\Models\Questions')->withTimestamps();
}
}
質問
01多くの関係に多くを使用した場合の<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Prettus\Repository\Contracts\Transformable;
use Prettus\Repository\Traits\TransformableTrait;
class Questions extends Model implements Transformable
{
use TransformableTrait, SoftDeletes;
protected $modelName = 'Questions';
protected $fillable = ['question', 'correct_answer', 'incorrect_answer', 'category_id', 'language_id', 'difficulty_level_id'];
public function getModelName()
{
return $this->modelName;
}
public function playerProfiles()
{
return $this->belongsToMany('App\Models\PlayerProfiles')->withTimestamps();
}
}
移行
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePlayerQuestionsPivotTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('player_questions', function(Blueprint $table)
{
$table->tinyInteger('player_id')->unsigned()->nullable();
$table->tinyInteger('question_id')->unsigned()->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('player_questions');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddForeignKeysToPlayerQuestionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('player_questions', function(Blueprint $table)
{
$table->foreign('question_id')->references('id')->on('questions')->onUpdate('RESTRICT')->onDelete('CASCADE');
$table->foreign('player_id')->references('id')->on('player_profiles')->onUpdate('RESTRICT')->onDelete('CASCADE');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('player_questions', function(Blueprint $table)
{
$table->dropForeign('player_questions_questions_id_foreign');
$table->dropForeign('player_questions_player_id_foreign');
});
}
}
これはあなたのタイプミスです。今更新しています –
はい、それが最適な解決策です。次に、そこに回答を追加することもできます。次に、プレイヤーが実際に答えたもののログがあります。 –
クール、これは私の頭の中で、プレイヤーがまだ答えていない質問を得るという観点からは、このクエリを実行する特性を作成すれば十分だろうと思いますか? –