2016-07-14 10 views
1

So erhalten Sie die Feeds des Benutzers, dem Sie folgen. Im Moment bin ich in der Lage, die ID des Benutzers zu erhalten, dem Sie folgen, aber ich kämpfe darum, die Feeds des folgenden Benutzers zu erhalten. FollowscontrollerSo erhalten Sie die Feeds des Benutzers, dem Sie folgen

<?php 

namespace App\Http\Controllers; 
use Redirect; 
use App\User; 
use Laracasts\Commander\CommanderTrait; 
use App\FollowUserCommand; 
use Sentinel; 
use Illuminate\Support\Facades\Input; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 


class FollowsController extends Controller 
{ 
use CommanderTrait; 
/** 
* Follow a User 
* 
* @param \Illuminate\Http\Request $request 
* @return \Illuminate\Http\Response 
*/ 
public function store() 
{ 
    $input = array_add(Input::all(), 'user_id', Sentinel::getuser()->id); 
    $this->execute(FollowUserCommand::class, $input); 
    return Redirect::back(); 
} 


/** 
* Unfollow a User 
* 
* @param int $id 
* @return \Illuminate\Http\Response 
*/ 
public function destroy($id) 
{ 
    // 
} 
} 

FollowUserCommand

<?php namespace App; 
use App\User; 

class FollowUserCommand { 

public $user_id; 
public $userIdToFollow; 

function __construct($user_id, $userIdToFollow) 
{ 
    $this->user_id = $user_id; 
    $this->userIdToFollow = $userIdToFollow; 
} 
} 

FollowUserCommandHandler

<?php namespace App; 

use Laracasts\Commander\CommandHandler; 

class FollowUserCommandHandler implements CommandHandler { 

protected $userRepo; 

function __construct(UserRepository $userRepo) 
{ 
    $this->userRepo = $userRepo; 
} 




public function handle($command) 
{ 
    $user = $this->userRepo->findById($command->user_id); 

    $this->userRepo->follow($command->userIdToFollow, $user); 

    return $user; 
} 

} 

UserRepository

012.
<?php namespace App; 
use App\User; 

class UserRepository { 

public function save(User $user) 
{ 
    return $user->save(); 
} 

public function getPaginated($howMany = 4) 
{ 
    return User::orderBy('first_name', 'asc')->paginate($howMany); 
} 

public function findByUsername($username) 
{ 
    return User::with(['feeds' => function($query) 
    { 
     $query->latest(); 
    } 

    ])->whereUsername($username)->first(); 
} 

public function findById($id) 
{ 
    return User::findOrFail($id); 
} 

public function follow($userIdToFollow, User $user) 
{ 
    return $user->follows()->attach($userIdToFollow); 
} 
} 

User.php

<?php namespace App; 
use Cartalyst\Sentinel\Users\EloquentUser; 
use Illuminate\Database\Eloquent\SoftDeletes; 


class User extends EloquentUser { 


/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'users'; 

/** 
* The attributes to be fillable from the model. 
* 
* A dirty hack to allow fields to be fillable by calling empty fillable array 
* 
* @var array 
*/ 
protected $fillable = []; 
protected $guarded = ['id']; 

/** 
* The attributes excluded from the model's JSON form. 
* 
* @var array 
*/ 
protected $hidden = ['password', 'remember_token']; 

/** 
* To allow soft deletes 
*/ 
use SoftDeletes; 

protected $dates = ['deleted_at']; 



public function feeds() 
{ 
    return $this->hasMany('App\Feed'); 
} 

public function comment() 
{ 
    return $this->hasMany('App\Comment'); 
} 


    // This function allows us to get a list of users following us 
public function follows() 
{ 
    return $this->belongsToMany(self::class, 'follows', 'follower_id', 'followed_id')->withTimestamps(); 
} 

// Get all users we are following 
public function following() 
{ 
    return $this->belongsToMany('User', 'followers', 'user_id', 'follow_id')->withTimestamps(); 
} 
} 

Antwort

1

Es sollte ziemlich einfach sein.

$user = User::with('following.feeds')->get(); 
foreach ($user->following as $followedUser) { 
    foreach ($followedUser->feeds as $feed) { 

    } 
} 
0

mit Sub-Abfrage kann ich wie unten erhalten. Wenn jemand eine andere Methode benötigt, überprüfen Sie den folgenden Code

$posts = Post::whereIn('user_id', function($query) use($id) 
     { 
      $query->select('leader_id') 
       ->from('followers') 
       ->where('follower_id', $id); 
     })->orWhere('user_id', $id)->latest()->paginate(10); 
Verwandte Themen