我是Eloquent Relationship的新手,在Laravel中都是新手。我想找到一种方法来做多对多的关系但不知何故,我得到了no output
。基本上我的目的是澄清Eloquent Relationships的概念,这就是为什么我更改了默认表名以及将所有模型和控制器放在单独的文件夹中的原因。虽然命名空间没有给出问题,但我相信雄辩的关系会带来某种问题。下面提到的是我的所有代码。
模特:namespace App\Relationship_Model;
class roles_model extends Model
{
protected $table="roles_table";
public $timestamps=false;
public function users_table()
{
return $this->belongsToMany(users_model::class);
}
}
class users_model extends Model
{
protected $table="users_table";
public $timestamps=false;
public function roles_table()
{
return $this->belongsToMany(roles_model::class);
}
}
class roles_users_model extends Model
{
public $timestamps=false;
protected $table="roles_users_table";
}
控制器:namespace App\Http\Controllers\Relationship_Controller;
use App\Relationship_Model\roles_model;
use App\Relationship_Model\users_model;
class HomeController extends Controller
{
public function index()
{
$role=users_model::find(1)->roles_model;
dd($role);
}
}
答案 0 :(得分:2)
当你做多对多时,你不需要像你这样的第三个模型:roles_users_model
,除非你是一个属于许多用户且属于许多角色的实体。
Laravel使用的是自己的命名约定。建议遵循这些命名。 但在您的情况下,您必须使用自己的参数指定:
return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');
Références:
https://laravel.com/docs/5.6/eloquent-relationships#many-to-many
https://github.com/alexeymezenin/laravel-best-practices#follow-laravel-naming-conventions