Laravel如何通过两个参数获取Model

时间:2014-08-02 16:22:47

标签: laravel laravel-4

嗨,我是Laravel的新手,遇到了问题。

我有一个模型Contact

class Contact extends Eloquent {
    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'contacts';
}

该表包含以下字段:

user_id (int)
contact_id (int)
...

这两个字段代表主键。

ContactsController我有函数store,我创建或更新了数据库:

public function store()
{

    switch (Input::get('type')){
        case 'make_contact_request':

            $user = User::where('email', '=', Input::get('login'));

            $request_self = new Contact;
            $request_contact = new Contact;

            $request_self->user_id = Auth::user()->id;
            $request_self->contact_id = $user->id;
            $request_self->status = 2;
            $request_self->message = Input::get('message');

            $request_contact->user_id = $user->id;
            $request_contact->contact_id = Auth::user()->id;
            $request_contact->status = 1;
            $request_contact->message = Input::get('message');

            $request_self->save();
            $request_contact->save();
            break;
        case 'answer_contact_request':

            $request_self = Contact::where('user_id', '=',Input::get('contact_id'))->where('contact_id', '=', Auth::user()->id)->first();
            //$request_self = Contact::whereRaw('user_id = '.Input::get('contact_id').' AND contact_id = '.Auth::user()->id.' ');
            $request_contact = Contact::whereRaw('user_id = '.Auth::user()->id.' AND contact_id = '.Input::get('contact_id').' ');

            $request_self->status = 3;
            $request_contact->status = 3;

            $request_self->save();
            $request_contact->save();
            break;
    }

}

我尝试了两种不同的方法来获取Contact对象的request_self对象,我收到以下错误:

message: "SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: update `contacts` set `status` = 3, `updated_at` = 2014-08-02 16:16:56 where `id` is null)"

对于request_contact对象,它会抛出致命错误(不要获取描述)并关闭会话。

最后我在laravel的开头,所以我希望解决方案很容易找到:)但我甚至不知道要搜索什么。

更新

最后,我使用update函数修复了问题。

 case 'answer_contact_request':

            $request_self = Contact::where('user_id', '=',Input::get('contact_id'))->where('contact_id', '=', Auth::user()->id)->update(array('status' => 3));
            $request_contact = Contact::where('user_id', '=', Auth::user()->id)->where('contact_id', '=', Input::get('contact_id'))->update(array('status' => 3));

            break;

1 个答案:

答案 0 :(得分:1)

我认为你可以添加

public function scopeComposite($query, $user_id, $contact_id)
{
    return $query->where('user_id', '=', $user_id)->where('contact_id', '=', $contact_id);
}

然后你可以联系:

$request_self = Contact::composite(Input::get('contact_id'), Auth::user()->id)->get();

来源:http://laravel.com/docs/eloquent#query-scopes

我不确定你能不能这样做。

有一种方法可以确保它有效:

添加列ID(自动增量,主要)并使组(contact_id,user_id)唯一,您可以使用查询范围和基于ID