Laravel 5.1:试图获得非对象的属性

时间:2015-11-24 11:29:01

标签: angularjs laravel laravel-5.1

我已经使用AngularJS更新了我的显示数据项目的视图,现在我遇到问题,当我更改项目的URL地址ID时,方法show()没有显示404错误 - 项目没有属于登录用户,而不是我收到此错误。

  

尝试获取非对象的属性(查看:C:\ www \ htdocs \ laravel \ resources \ views \ backend \ partials \ project \ single-project.blade.php)

在我更新我的观点以使用AngularJS之前,一切正常。

我的角度控制器:

freelo.controller('mainCtrl', ['$scope', '$http', function($scope, $http) {

$scope.projects = [];
$http.get('api/userProjects')
    .then(function(response) {
        $scope.projects = response.data;
    });
}]);

我的app.js

var freelo = angular.module('freelo', []);

检索用户项目的方法:

public function getProjectsInJson(){
    $project = Project::where('user_id', '=', $this->getCurrentUserId())->get();

    return response()->json($project);
}

show()中的ProjectsController方法:

public function show($id){
    $project = Project::where('id','=', $id)
                        ->where('user_id', '=', $this->getCurrentUserId())
                        ->first();
    $user = DB::table('projects')
        ->join('users', 'projects.user_id', '=', 'users.id')
        ->join('profiles', 'users.id', '=', 'profiles.user_id')
        ->select('users.id','profiles.username')
        ->where('projects.id','=', $id)
        ->get();

    if(!$project && !$user){
        abort(404);
    }else{
        return view('backend.partials.project.single-project')->with('project', $project)->with('user', $user);
    }
}

我在哪里犯了错误或必须改变什么?

1 个答案:

答案 0 :(得分:1)

  public function show($id){
    try{
        $project = Project::where('id','=', $id)
              ->where('user_id', '=', $this->getCurrentUserId())
              ->with(['user', 'user.profile'])
              ->firstOrFail();
    }catch(\ModelNotFoundException $e){
        abort(404);
    }    

    return view('backend.partials.project.single-project')->with('project', $project);
  }

项目模型就像

public function user()
{
 return $this->belongsTo('\User', 'user_id');
}

用户模型:

public function profile()
{
 return $this->hasOne('\Profile', 'user_id', 'id');
}

试试这个