【问题标题】:Laravel working out with multiple data in a columnLaravel 在列中处理多个数据
【发布时间】:2017-03-05 19:25:41
【问题描述】:

我正在开发一个 laravel 基础分析系统。

示例表..

人物

id | Name   | sports_id
1  | foo    | 1,2
2  | bar    | 2,3
3  | derp   | 1,3

运动

id | Name       |
1  | basketball |
2  | volleyball |
3  | swimming   |

问题:

如何从Person 表中获取所有Name 记录,其中sports_id 对应于值basketball 仅来自Sports 表?

因为Person 表未规范化,我对如何执行上述查询感到困惑。

或者

有没有办法规范化Person表,以便我可以正常查询?

【问题讨论】:

标签: mysql sql laravel laravel-5.2


【解决方案1】:

你真的应该在这里使用many-to-many relationshsip

如果由于某种原因您不想使用简单查询:

User::where('sports_id', 2)->get();

【讨论】:

  • only 子句不适用于此解决方案。
  • @PseudoAj,什么only 子句?
  • "人名,谁的运动只有篮球?"我在想 Jefsama 正在寻找 only basketball 意思是 id 2 而不是 %,2,%
  • @PseudoAj,哦,是的,我错过了“唯一的篮球”部分。修复了代码。谢谢。
  • 哦,我以为它会变得复杂。我会尝试使用many-to-many-relationship,我希望它能按我想要的方式工作。感谢您的回答!
【解决方案2】:

您需要为名为@9​​87654321@ 的关系创建附加表。所以你的表格看起来像

persons [id, name]
sports [id, name]
persons_sports [person_id, sport_id]

然后你需要为你的模型添加关系

// In Person class
public function sports()
{
    return $this->hasMany(Sport::class)
}

然后你可以搜索类似的人

$sport_name = 'basketball';

$persons = Person::whereHas('sports', function ($query) use ($sport_name) {
    $query->where('name', $sport_name);
})->get();

【讨论】:

    猜你喜欢
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多