在laravel中如何进行多对多关系查询

时间:2018-10-24 06:30:00

标签: laravel laravel-5 relationship

简介:

我使用laravel 5.6

我在很多关系查询中遇到问题。

我有2种型号:订单和购物车


代码:

购物车型号:

class Cart extends Model
{
    public function order()
    {
        return $this->belongsToMany(Order::class);
    }
}

订单模型:

class Order extends Model
{
    public function carts(){

        return $this->belongsToMany(Cart::class);
    }
}

购物车迁移:

public function up()
{
    Schema::create('carts', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->nullable();
        $table->integer('price')->nullable();
        $table->integer('pass')->default(0);

    });
}


问题:

如何获取其pass字段位于Cart = 1中的订单?

谢谢!

2 个答案:

答案 0 :(得分:4)

首先,由于您的购物车有很多订单,因此该关系应以s命名为“ orders”。

您只显示了购物车迁移,所以我无法猜测,但是Laravel也希望您创建一个“购物车”数据透视表。

如果我理解得很好,您可以按照以下步骤做:

Order::whereHas('carts', function ($query) {
    $query->where('pass', 1);
})->get();

您可以在Laravel文档here中了解有关Eloquent的多对多关系的更多信息。

答案 1 :(得分:1)

尝试这样

            <?php

            namespace App;

            use Illuminate\Database\Eloquent\Model;

            class Comment extends Model
            {
                /**
                 * Get all of the owning commentable models.
                 */
                public function commentable()
                {
                    return $this->morphTo();
                }
            }

            class Post extends Model
            {
                /**
                 * Get all of the post's comments.
                 */
                public function comments()
                {
                    return $this->morphMany('App\Comment', 'commentable');
                }
            }

            class Video extends Model
            {
                /**
                 * Get all of the video's comments.
                 */
                public function comments()
                {
                    return $this->morphMany('App\Comment', 'commentable');
                }
            }

//在控制器中这样访问                 $ post = App \ Post :: find(1);

            foreach ($post->comments as $comment) {
                //
            }

此链接可以帮助您, 在这种情况下,https://laravel.com/docs/5.7/eloquent-relationships#polymorphic-relations。希望对您有帮助。