4

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

:身份证,姓氏,名字

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

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

谢谢你的帮助!

4

1 回答 1

3

在这种情况下,一个简单的关系不会有帮助,因为您想根据作为第二个查询的关系来约束 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()) 你必须有一个结果模型。
于 2012-12-19T22:20:34.223 回答