了解Laravel关系 - 它们没有意义......?

时间:2014-08-29 00:03:02

标签: php mysql laravel eloquent relationship


我有两张桌子。这个叫做团队

+------------+--------------+------+----------------------+----------+
|   Column   |     Type     | Null |       Default        | Comments |
+------------+--------------+------+----------------------+----------+
| id         | int(10)      | No   |                      |          |
| apikey     | varchar(255) | Yes  | NULL                 |          |
| name       | varchar(255) | Yes  | NULL                 |          |
| logo       | varchar(255) | Yes  | NULL                 |          |
| url        | varchar(255) | Yes  | NULL                 |          |
| hashtag    | varchar(255) | Yes  | NULL                 |          |
| created_at | timestamp    | No   | 0000-00-00 00:00:00  |          |
| updated_at | timestamp    | No   | 0000-00-00 00:00:00  |          |
+------------+--------------+------+----------------------+----------+

另一个名为飘带

+--------------+--------------+------+----------------------+----------+
|    Column    |     Type     | Null |       Default        | Comments |
+--------------+--------------+------+----------------------+----------+
| id           | int(10)      | No   |                      |          |
| apikey       | varchar(255) | Yes  | NULL                 |          |
| name         | varchar(255) | Yes  | NULL                 |          |
| team         | int(11)      | Yes  | NULL                 |          |
| type         | varchar(255) | Yes  | NULL                 |          |
| twitch       | varchar(255) | Yes  | NULL                 |          |
| mlg          | int(11)      | Yes  | NULL                 |          |
| url          | varchar(255) | Yes  | NULL                 |          |
| twitter      | varchar(255) | Yes  | NULL                 |          |
| status       | int(11)      | Yes  | NULL                 |          |
| viewers      | int(11)      | Yes  | NULL                 |          |
| created_at   | timestamp    | No   | 0000-00-00 00:00:00  |          |
| updated_at   | timestamp    | No   | 0000-00-00 00:00:00  |          |
| last_live    | timestamp    | No   | 0000-00-00 00:00:00  |          |
| last_edit_by | int(11)      | Yes  | NULL                 |          |
+--------------+--------------+------+----------------------+----------+

如您所见,流媒体表格中有一个团队字段,该字段只是团队 ID。

我的 Team.php 模型已经有了这个:

public function streamers()
    {
        return $this->hasMany('Streamer', 'team');
    }

这是我想做的事情

我想通过团队搜索流媒体,但最终用户只需要使用名称而不是ID。如何建立表格关系,以便我可以在流媒体表格中查询团队名称而不是ID?这有可能吗?

我会认为这正是一个人的关系,但显然我错了。由于我显然没有团队表中的流媒体 ID,因为上的每个流媒体 ID团队会很糟糕。 Laravel的关系在这里似乎有点不对...因为hasOne适合飘带但它只适用于团队,但基本上飘带有一个< strong>团队和团队属于许多流媒体,这意味着belongsToMany会有意义。

感谢

1 个答案:

答案 0 :(得分:1)

您正在寻找的是 belongsTo 关系。

飘带中包含:

public function team()
{
    $this->belongsTo('Team','team');
}

然后您可以按团队查询流媒体:

$streamer = Streamer::whereHas('team', function($q)
{
    $q->where('name', 'like', $teamName);

})->get();

可以在文档中找到更多详细信息:http://laravel.com/docs/eloquent#querying-relations