我有一个房地产应用程序的属性列表,我试图根据每个属性细节实现类似/不同的功能。我们的想法是添加一个like或删除它匹配当前属性和用户。到目前为止,这是我的代码,但它只删除了喜欢它,因此它没有按预期工作。如果有人可以建议更好的方法,我将不胜感激。
//控制器
public function storeLike($id)
{
$like = Like::firstOrNew(array('property_id' => $id));
$user = Auth::id();
try{
$liked = Like::get_like_user($id);
}catch(Exception $ex){
$liked = null;
}
if($liked){
$liked->total_likes -= 1;
$liked->status = false;
$liked->save();
}else{
$like->user_id = $user;
$like->total_likes += 1;
$like->status = true;
$like->save();
}
return Redirect::to('/detalle/propiedad/' . $id);
}
//型号
public static function get_like_user($id)
{
return static::with('property', 'user')->where('property_id', $id)
->where('user_id', Auth::id())->first();
}
//路线
Route::get('store/like/{id}', array('as' => 'store.like', 'uses' => 'LikeController@storeLike'));
答案 0 :(得分:0)
@AndrésDaViá看起来你正在从模特身上回归物体。如果数据库中没有数据,它仍然会返回一个对象 - 到目前为止我的猜测。您可以在if($liked){
代码中执行以下操作吗?
请改为尝试:
if(isset($liked -> user_id)){
尝试在try和catch块之后尝试打印 $ likes 变量。使用var_dump
。
如果这仍然不适合你,请告诉我。我将尝试根据您的问题创建代码。
答案 1 :(得分:0)
通过在我的模型中添加where子句来使其状态等于True - > where('status',1) - > first();