存储/显示角色的统计数据

时间:2018-04-10 01:09:46

标签: jquery database laravel

我正在使用Laravel 5,而且我的角色设备具有特殊性。 我的实体看起来像:

character --> character_equipement <-- equipement  --> stats_equipement <-- stats

我不知道如何显示角色的统计数据,因为它们取决于他所适应的装备。

我真的想用jQuery来管理它:当我加载页面时(类似'myUrl / character / 78'),我做一个ajax查询以这种方式提取:

对于这个角色,我想要他所有设备的所有属性。

然后我将它们显示在我的div中。

  • 在加载页面时执行ajax查询听起来可能很愚蠢(我是初学者,所以可能是一个愚蠢的问题)
  • 我可能无法正确显示我的div,因为我必须检查一下这个数据,以便知道我所采用的每个统计数据是否都会进入此div。

其次,我想通过一个模型来管理它: 我通过查询总结了所有的统计数据,然后将它们显示在我的div中。

但是这样,我可能不得不经历每一个div的响应(我至少有15个div)并且我认为这对服务器性能没有好处。

最后,我打算将所有属性存储在我的角色实体中:

id_char, name_char, img_char, health_char, strength_char, wisdom_char, damage_char 

等...

有人可以帮助我采取最好的方法吗?或者也许给我另一个!

使用预先加载编辑:

这是我尝试过的。我首先想从我的角色中仅采用设备进行调试。这就是我所做的:

在我的角色模型中:

 public function equipements(){
    return $this->belongsToMany(EncyclopedieModel::class, 'stuff_equipement', 'id_equipement', 'id_equipement');
}

然后当我调试它时,我得到了这个回复:

 select * from equipement inner join stuff_equipement on equipement.id_equipement = stuff_equipement.id_equipement

哪个好......然后我在我的控制器中调试看起来像这样的初始查询:

 public function getEquipementsChar(){
    return StuffModel::with('equipements')->where('id_stuff', 1)->get();
}

然后我调试它并返回:

"select * from `stuff` where `id_stuff` = ?"

我认为这个函数会用字符串搜索字符1,但我不知道为什么我的函数没有通过'with',似乎我的函数忽略了它。

我错过了什么吗?

编辑2:

它有我通过我的equipements()函数指定的参数。我修改了它们的好方法,我现在很好。

1 个答案:

答案 0 :(得分:1)

我假设您拥有所有实体的模型,您可以使用laravel 5中的预先加载来实现此目的,

character.php(模特)

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\Equipement;

class Character extends Model
{

     public function equipements()
     {
         return $this->belongsToMany(Equipement::class);
     }
 }

当然,如果每个角色都有一个装备,你可以选择

$this->blongsToOne(Equipment::class);

该模型将通过数据透视表来加载设备,即

table_name:'character_equipement'

字段:id,character_id,equipement_id

现在,equipment.php(模型)

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\Stat;

class Equipment extends Model
{

     public function stats()
     {
         return $this->belongsToMany(Stat::class);
     }
 }

同样在这里,如果每个设备都有一个属性,你可以选择

$this->blongsToOne(Stat::class);

此模型将通过数据透视表急切加载统计数据,即

table_name:'equipement_stat'

字段:id,equipement_id,stat_id