嗨,我是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;
答案 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