Laravel 5.4: Can't get data from relationship

I am trying to display the assignee name (foreign key from the Users table) of each ticket, storing each name in an array of two UNION'd tables (Accesses and Reports), but it gives me this error. ErrorException Undefined property: stdClass :: $ assignee.

//HomeController
    $accesses = DB::table('accesses')
                ->select(array('id', 'fullname','emp_id','shift','state','resolved_at', 'closed_at','assigned_to'))
                ->where('state','=','Assigned');

    $all = DB::table('reports')
                ->select(array('id', 'fullname','emp_id','shift','state','resolved_at', 'closed_at','assigned_to'))
                ->union($accesses)
                ->where('state', '=', 'Assigned')
                ->get();

    $names[] = array();

    foreach ($all as $one)//store in array to display in a chart
    {
      $names[] = $one->assignee->name; //error here
    }




   //Report Model
   public function assignee()
   {
      return $this->belongsTo(User::class, 'assigned_to');
   }

   //Access Model
   public function assignee()
   {
      return $this->belongsTo(User::class, 'assigned_to');
   }

  //Report Migration
  public function up()
  {
    Schema::create('reports', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->nullable();
        $table->string('fullname');
        $table->string('emp_id');
        $table->string('shift');
        $table->longText('report');
        $table->string('status')->default('Pending'); //Pending, Approved
        $table->string('state')->default('Open'); //Open, Assigned, Resolved, Closed
        $table->date('resolved_at')->nullable();
        $table->date('closed_at')->nullable();
        $table->integer('assigned_to')->nullable();
        $table->longText('action')->nullable();
        $table->timestamps();
    });
   }

   //Access Migration
   public function up()
   {
    Schema::create('accesses', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->nullable();
        $table->string('fullname');
        $table->string('emp_id');
        $table->string('shift');
        $table->string('request');
        $table->longText('note')->nullable();
        $table->string('status')->default('Pending'); //Pending, Approved
        $table->string('state')->default('Open'); //Open, Assigned, Resolved, Closed
        $table->date('resolved_at')->nullable();
        $table->date('closed_at')->nullable();
        $table->integer('assigned_to')->nullable();
        $table->longText('action')->nullable();
        $table->timestamps();
    });
   }

      

He gives me this error

The results should be like this

+3


source to share


2 answers


You have to use the collection method merge

:



$accesses = Access::select(array('id', 'fullname','emp_id','shift','state','resolved_at', 'closed_at','assigned_to'))
            ->where('state','=','Assigned')
            ->get();

$reports = Report::select(array('id', 'fullname','emp_id','shift','state','resolved_at', 'closed_at','assigned_to'))
            ->where('state', '=', 'Assigned')
            ->get();

$all = $accesses->merge($reports);

      

0


source


Your question is not entirely clear, but it seems that you actually need a username. This is untested because I don't have a dataset to test. But it has to find the name of all users who have assigned access or assigned state.



$names = DB::table('users')
    ->select('users.name')
    ->leftJoin('accesses', function ($join) {
        return $join->on('users.id', '=', 'accesses.assigned_to')
            ->where('accesses.state', '=', 'Assigned');
    })
    ->leftJoin('reports', function ($join) {
        return $join->on('users.id', '=', 'reports.assigned_to')
            ->where('reports.state', '=', 'Assigned');
    })
    ->where(function ($query) {
        return $query->whereNotNull('accesses.id')
            ->orWhereNotNull('reports.id');
    })
    ->groupBy('users.id');

      

0


source







All Articles