1

我设置了以下数据库表

  +--------------+    +--------------+    +-----------------------+
  |   users      |    |   clients    |     |   user_clients       |
  +--------------+    +--------------+     +----------------------+
  |   id         |    |   id         |     |      usersid         |
  |   name       |    |   name       |     |        clientid      |
  |   authid     |    |   email      |     +----------------------+
  |   (plus)     |    |   (plus)     |    
  +-------------+     +-------------+

我已经建立了一个关系表 [b]user_clients[/b] 与相关数据库的外键,所以 userid 链接到 users->id 并且 clientid 链接到 clients->id。

取决于用户 Authid 是多少客户端被链接:

Authid 1:用户只能有一个与之关联的客户端。

Authid 2:用户只能有一对多的客户端与之关联

Authid 3:用户可以访问所有客户端。

因此,由于我是 laravel 关系方面的新手,目前我会进行大量查询以获取一些详细信息,例如:

我会做类似的事情:

  $userClient =UsersClients::select('clientid')->where('userid','=',$userid)->get();

然后我可能会遍历结果,然后获取每个客户的详细信息并输出到页面。

 foreach($userClient as $i ->$cleint){
    echo '<div>' .$cleint->name . '</div>';
    ........
 }

这会是一种旧方法吗?可以更好地处理吗?

- - - - - - - - 编辑 - - - - - - - -

我设法将其排序如下:

用户模型:

 public function clients() {
        return $this->hasMany('UsersClients','userid');
  }

用户控制器

  $selectedUserClients = User::find(24)->clients;

我得到的结果与之前在客户端 ID 1 和 2 中的结果相同,但现在如何从实际客户端数据库中获取客户端详细信息基本上有以下更简单的方法:

  foreach ($selectedUserClients as $key => $client) {
     $clientInfo = Client::select('id','clientname')->where('id','=',$client->clientid)->get();
     echo $clientInfo[0]->clientname;
  }
4

1 回答 1

1

users_clients 表需要它自己的 ID 列才能使多对多关系起作用。

在您的用户模型上,尝试

public function clients()
{
    return $this->belongsToMany('Client','user_clients','userid','clientid');
}

现在您可以找到分配给每个单独用户的客户端 User::find(24)->clients

你也可以在你的客户模型上做相反的事情......

public function users()
{
    return $this->belongsToMany('User','user_clients','clientid','userid');
}

这将允许您找到属于每个客户端的所有用户 Client::find(42)->users;

我还想提一下,最好为您的 id 使用蛇盒,例如user_idor client_id

你的表名应该是复数。usersclients

你的数据透视表应该是snake_case,按字母顺序,单数。 client_user.

这将使与 Eloquent 的合作变得更加容易,因为在建立关系时您不必担心,并且其他人可能更容易帮助您完成项目。

而不是return $this->belongsToMany('Client','user_clients','userid','clientid');你要做的就是return $this->belongsToMany('Client');让你的应用程序更干净、更容易阅读。

于 2013-07-15T17:36:26.940 回答