雄辩如何搜索关系的价值观

时间:2012-12-19 18:04:54

标签: php laravel eloquent

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

person :id,lastname,firstname

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

我需要帮助才能找到完成方法:)

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

在这种情况下,一个简单的关系不会有帮助,因为你想根据第二个查询的关系约束People结果。

使用此架构,您需要进行连接,如果您将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”作为一张桌子,但你说你有人桌。
  2. 将id指定为外键不是一件好事,保持两个表同步只会产生问题。
  3. 在任何地方使用or_where()都是不必要和错误的,只需在必要时使用它。
  4. 从您在处理查询对象的模型上运行任何查询或关系方法时,您无法对查询对象执行关系方法。 (phonebookentry())您必须拥有结果模型。
相关问题