0

我在用户表中有用户的图片,我希望根据我发送的邀请访问这些图片。试图抓取与我发送的所有邀请相关的所有用户图片。我有一个这样的模型结构:

class User extends Eloquent
{

public static $table = 'users';
public static $accessible = array('username', 'email', 'picture', 'password');

public function nests()
{
    return $this->has_many('Nest');
}

class Nest extends Eloquent
{

public static $table = 'nests';

public function user()
{
    return $this->belongs_to('User');
}

class Invite extends Eloquent
{

public static $table = 'invite';


public function nest()
{
    return $this->belongs_to('Nest');
}

这是我的迁移:

{
    Schema::create('users', function($table) {
    // auto incremental id (PK)
        $table->increments('id');
    // varchar 32
        $table->string('username', 32);
        $table->string('email', 64);
        $table->string('picture');
        $table->string('password');
        $table->string('role');
    // boolean
        $table->boolean('true');
    // created_at | updated_at DATETIME
        $table->timestamps();   
    });
}

    {
    Schema::create('nests', function($table) {
    // auto incremental id (PK)
        $table->increments('id');
    // varchar 32
        $table->string('nestname', 128);
        $table->text('info');
        $table->integer('user_id');
    // boolean
        $table->boolean('active');
    // created_at | updated_at DATETIME
        $table->timestamps();   
    });
}

{
    Schema::create('invite', function($table) {

        $table->increments('id');
        $table->text('mypeeps');
        $table->integer('user_id');
        $table->integer('nest_id');
        $table->string('email', 128);
        $table->timestamps();   
    });
}

这是我试图获取照片但它不起作用的方式:

    $users = DB::table('users')
    ->join('nests', 'nests.user_id', '=', 'users.id')
    ->join('invite', 'invite.nest_id', '=', 'nests.id')
    ->where_nest_id($id)
    ->get(array('users.picture', 'users.username')); 
4

1 回答 1

0

好吧,我试图猜测你的问题是什么,但我认为你的查询是错误的,你只获取了一个用户,因为我尝试了你的代码,这就是发生在我身上的事情。

您说要根据您发送的邀请来获取用户的图片,所以最简单的方法是将用户表与邀请表连接起来,但是在您放置的代码中,您的查询是基于嵌套的 id .

我更改了您的查询,以便根据nest 的ID 首先获取邀请的ID。然后,我进行了另一个查询,该过程在哪里加入带有邀请 ID 的用户表。

 // fetch the ids of invitation
 $inviteIds = DB::table('invite')
    ->join('nests', 'invite.nest_id', '=', 'nests.id')
    ->where_nest_id($id)
    ->get('invite.id');

 // There must be a better clean solution for this, but it works
 $ids = array();
 foreach($inviteIds as $id){
     $ids[] = $id->id;
 }

 // array of id of invites
 $users = DB::table('users')
    ->join('invite', 'invite.user_id', '=', 'users.id')
    ->where_in('invite.id', $ids)
    ->get(array('users.picture', 'users.username'));

 // show the users
 dd($users);
于 2013-04-16T14:19:52.783 回答