【问题标题】:Laravel where pivotLaravel 在哪里枢轴
【发布时间】:2019-03-25 21:13:18
【问题描述】:

我有一个订阅系统。每个订阅都有一个类型,每个subscription_type 都有文章。创建订阅时 articles 来自subscription type 的大小为M 应该在subscription_articles 表中创建。

我有这个表结构:

subscription
- id
- name
- subscription_type_id

subscription_type
- id
- name

article
- id
- name
- price

subscription_articles
- id
- subscription_id
- article_id

subscription_type_articles
- id
- subscription_type_id
- article_id
- size

关系是这样的:

订阅模式:

/**
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function type()
{
    return $this->belongsTo(SubscriptionType::class, 'subscription_type_id');
}

订阅类型型号:

/**
 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
 */
public function articles()
{
    return $this->belongsToMany(Article::class, 'subscription_type_articles');
}

当创建subscription 时,应在subscription_type_articles 中创建articles,其中大小为M subscription_articles 表。

我是这样尝试的:

$articles = $subscription->type->articles()->wherePivot('size', '=', 'M');

我收到此错误:

local.ERROR: 允许的内存大小为 134217728 字节已用尽(已尝试 分配130027520字节)

显然有问题,会是什么?

【问题讨论】:

  • 这是 php - memory_limit 错误,您需要编辑您的 php.ini 文件。将memory_limit 编辑为您想要的值。一种在运行时覆盖php代码中memory_limit的简单方法,在articles()中尝试ini_set('memory_limit', '-1');看看是否有效
  • 那不行。
  • 也许试试:->wherePivot('size', 'M'); - 事实上,正如我所说,这个 Allowed memory size exhausted 错误与 memory_limit 的 php 配置有关
  • 虽然这是内存限制错误,但解决方法不是增加内存。它可能是某种不应该存在的循环。我无法根据信息判断,但我建议通过composer安装laravel调试栏并尝试查看查询选项卡。
  • 您能提供更多代码吗?例如你的控制器

标签: php database laravel eloquent


【解决方案1】:

想通了,我应该在方法结束时调用->get();。所以结果是:

$articles = $subscription->type->articles()->wherePivot('size', '=', 'M')->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2020-07-29
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多