Laravel 4 Pivot Table (many to many) not loading

假如想象 提交于 2019-12-11 20:35:35

问题


I have 2 tables: 'users' and 'nests' and 1 pivot table: 'nest_user'. In my pivot table I have email addresses I want to filter against so I can grab all the nests which have the associated email addreses. Here is my scehma:

public function up()
{
    Schema::create('users', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('username');
        $table->text('bio');
        $table->string('picture');
        $table->string('email');
        $table->string('password');
        $table->integer('visits');
        $table->integer('nest_id');
        $table->timestamps();
    });
}

    public function up()
{
    Schema::create('nests', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('name');
        $table->string('info');
        $table->integer('note_id');
        $table->integer('website_id');
        $table->integer('image_id');
        $table->integer('video_id');
        $table->integer('location_id');
        $table->integer('user_id');
        $table->integer('share_id');
        $table->string('inviteAuth');
        $table->string('tid');
        $table->timestamps();
    });
}

    public function up()
{
    Schema::create('nest_user', function(Blueprint $table)
    {
        $table->increments('id');
        $table->integer('user_id');
        $table->integer('nest_id');
        $table->string('inviteEmail');
        $table->timestamps();
    });
}

I can do this no problem based on the User ID like this:

Route::get('/t1', function () {

    $nest = User::find(2)->nest()->where('inviteEmail', '=', 'martinelli@gmail.com')->get();

    foreach( $nest as $nest)

    echo $nest->name, ': ', $nest->pivot->inviteEmail, "</br>";
});

I can get the nest and name and the email in the pivot - awesome...However, I want to find ALL the 'nests' which have the associated email which is NOT tied to a user ID. This is getting me closer but it is still not working:

    Route::get('/t4', function () {

    $users = User::all();

    foreach($users as $users)
    {
        $nests = $users->with(array('nest' => function($query) {
        $query->where('inviteEmail', '=', 'martinelli@gmail.com');
    }))->get();

        foreach($nests->nest as $nest)
        {
            echo $nest->name,"<br />";

        }
    }

    });

I am getting this error:

Undefined property: Illuminate\Database\Eloquent\Collection::$nest  

回答1:


I'm not sure I fully understand your question, but your last code block doesn't make sense. You'll want to do the with while fetching the users. Also, the error you're getting makes sense, because the $nests (Collection) doesn't have a $nest property.

Again, I'm not sure this is what you're after, but give this a try:

Route::get('/t4', function () {

    // Get all users and their nests where nests are filtered by inviteEmail
    $users = User::with(array('nest' => function($query) {
        $query->where('inviteEmail', '=', 'martinelli@gmail.com');
    }))->get();

    // Loop through all users
    foreach($users as $user)
    {
        // I'm asuming you defined the relation as nests() in your User model.
        foreach($user->nests as $nest)
        {
            echo $nest->name . "<br />";
        }
    }
});


来源:https://stackoverflow.com/questions/17048086/laravel-4-pivot-table-many-to-many-not-loading

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!