php - Eloquent 地如何搜索关系的值(value)

标签 php laravel eloquent

我有以下表格,其中包含以下字段:

:身份证、姓氏、名字

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.*');

但是对于每个一对一的关系,强烈建议考虑模式,很有可能合并表会更好。过度规范化通常无济于事。

还有一些杂项:

  1. 你有“personphonebookentries”表,但你说你有 person 表。
  2. 将 id 指定为外键不是一件好事,保持两个表同步只会产生问题。
  3. 到处使用or_where()是不必要的错误,只在需要的地方使用它。
  4. 当您在模型上运行任何查询或关系方法时,您正在处理查询对象,您不能在查询对象上执行关系方法。 (phonebookentry()) 你必须有一个结果模型。

关于php - Eloquent 地如何搜索关系的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13958386/

相关文章:

php - 我在 laravel 中有一个表单,当我单击提交按钮时,它说 token 不匹配

php - 如果我使用 CodeIgniter,清理 $_GET 以进行数据库搜索的最佳方法是什么?

javascript - 希望保留 ajax_loder.gif 在用户检查用户名可用性时显示一到两秒

php - 无法使用LIKE使用php从mysql中提取数据

php - 分页问题 [PHP & is_numeric]

laravel - Eloquent ORM 选择带有限制和列名的所有内容

php - 如何从 laravel 5 中的 Public/Images 文件夹中删除图像(URL 数据)

mysql - 如何为 'users who view my profile' 创建逻辑?

php - 如何在 Laravel Eloquent 中移动行?

php - 将原始查询连接更改为 laravel Eloquent