【问题标题】:Understanding Laravel reationships - they don't make sense...?理解 Laravel 的关系——它们没有意义......?
【发布时间】:2014-08-29 00:03:02
【问题描述】:

我有两张桌子。这个叫做teams

+------------+--------------+------+----------------------+----------+
|   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  |          |
+------------+--------------+------+----------------------+----------+

另一个叫做streamers

+--------------+--------------+------+----------------------+----------+
|    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                 |          |
+--------------+--------------+------+----------------------+----------+

如您所见,streamers 表有一个 team 字段,该字段仅是 team ID。

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

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

这就是我想做的事情

我想搜索 teamstreamers,但是最终用户只需要使用名称而不是 ID。如何建立表关系,以便在 streamers 表中查询 team 名称而不是 ID?这可能吗?

我会认为这正是 hasOne 的关系,但显然我错了。因为我显然在 team 表中没有 streamer ID,因为 team 上的每个 streamer ID 都会可怕。 Laravel 的关系在这里似乎有点不对...因为 hasOne 适合 streamers 但它只适用于 teams,但本质上 streamersstreamers strong>team 和 team 属于许多 streamers,这意味着 belongsToMany 是有意义的。

谢谢

【问题讨论】:

标签: php mysql laravel eloquent relationship


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2021-06-19
    相关资源
    最近更新 更多