2016-07-14 22 views
1

如何獲取您關注的用戶的供稿。現在,我可以獲取您所關注的用戶的ID,但正努力獲取以下用戶的提要。 Followscontroller如何獲得您所關注的用戶的供稿

<?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

<?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(); 
} 
} 

回答

1

它應該是相當簡單。

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

    } 
} 
0

使用子查詢我能夠得到像下面。如果有人需要其他方式,請檢查以下代碼

$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); 
相關問題