我有以下表格,其中包含以下字段:
人:身份证、姓氏、名字
phonebookentry: id, name
我有以下两个模型:
class Person extends Eloquent
{
public static $table = 'personphonebookentries';
public function phonebookentry()
{
return $this->has_one('Phonebookentry', 'id');
}
}
class Phonebookentry extends Eloquent
{
public function person()
{
return $this->belongs_to('Person', 'id');
}
}
我不知道如何获取所有具有特定名字或特定号码的人。
我试过了:
Person::or_where('firstname', 'LIKE', '_name_')->phonebookentry()->or_where('number', '=', '_number_')->get();
我需要帮助来了解如何完成这项工作:)
感谢您的帮助!
最佳答案
在这种情况下,一个简单的关系将无济于事,因为您想根据作为第二个查询的关系来限制人员结果。
使用此模式,您需要进行连接,如果您将 person_id 添加到 phoneboookentry 表,则类似这样:
Person::join('phoneboookentry', 'person.id', '=', 'phoneboookentry.person_id')
->where('person.firstname', 'LIKE', "%$name%")
->or_where('phoneboookentry.number', '=', $number)
->get('person.*');
但是对于每个一对一的关系,强烈建议考虑模式,很有可能合并表会更好。过度规范化通常无济于事。
还有一些杂项:
- 你有“personphonebookentries”表,但你说你有 person 表。
- 将 id 指定为外键不是一件好事,保持两个表同步只会产生问题。
- 到处使用
or_where()
是不必要的错误,只在需要的地方使用它。 - 当您在模型上运行任何查询或关系方法时,您正在处理查询对象,您不能在查询对象上执行关系方法。 (
phonebookentry()
) 你必须有一个结果模型。
关于php - Eloquent 地如何搜索关系的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13958386/