【问题标题】:Eloquent how to search in relation's values雄辩的如何搜索关系的值
【发布时间】:2012-12-07 03:49:36
【问题描述】:

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

:身份证、姓氏、名字

电话簿条目:ID、姓名

我有以下两种型号:

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();

我需要帮助来了解如何完成这项工作:)

感谢您的帮助!

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    在这种情况下,一个简单的关系将无济于事,因为您想根据作为第二个查询的关系来约束 People 结果。

    使用此架构,您将需要进行连接,如果您将 person_id 添加到 phonebookentry 表中,请执行以下操作:

    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()) 你必须有一个结果模型。

    【讨论】:

    • 非常感谢我们 TLGreg:它工作得很好。只是回答你的几个观点。 0:我有一个电话簿条目表,它可以指向个人(如这里)或公司或具有与每种类型相关的特定数据的设施。它仍然是过度标准化吗? 1:是的,从您的角度来看,这有什么问题? 2:我继承了这个模式,我会在 Laravel 和 Eloquent 正常后立即更正它 3:我使用这个查询来搜索符合这些条件之一的用户 4:好的,这就是我所缺少的 :)
    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 2021-12-15
    相关资源
    最近更新 更多