在Laravel 3中 - 需要帮助传递嵌套数据

时间:2013-04-16 13:19:37

标签: laravel laravel-3

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

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')); 

1 个答案:

答案 0 :(得分: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);