Laravel 变形关系

2023-11-26

我有一个关于在 Laravel 中保存多态关系的问题。这是我想在 laravel 中创建的模型。

Class diagram

商店有很多产品,产品可以是“商品”、“活动”或“服务”。

我有以下表格:

  • shops
    • id
    • user_id
    • name
  • events
    • id
    • public
    • title
    • 描述
  • products
    • id
    • shop_id
    • 可生产的_id
    • 可生产类型

这就是我设置模型的方式:

class Shop extends Model{
    public function products(){
        return $this->hasMany('App\Product');
    }
}

class Product extends Model{
    public function productable(){
        return $this->morphTo();   
    }
}

class Event extends Model{
    public function product(){
        return $this->morphOne('App\Product','productable');
    }
}

我希望能够执行以下操作:

$shop = Shop::first()
$event = Event::create(['title'=>'Some event']);
$service = Service::create(['title' => 'Some service']);
$shop->products()->save($event);
$shop->products()->save($service);

但这不起作用!当我尝试保存关系时,我得到:

Illuminate\Database\QueryException with message 'SQLSTATE[HY000]: General error: 1 no such column: shop_id (SQL: update "accendo_events" set "updated_at" = 2016-11-26 10:11:02, "shop_id" = 1 where "id" = 1)'

有人知道哪里出了问题吗?我可能误解了这种关系......


首先添加一个反向关系Shop from Product Model

    class Shop extends Model
    {
      public function products()
      {
        return $this->hasMany('App\Product');
      }
    }

    class Product extends Model
    {
      public function shop()
      {
        return $this->belongsTo('App\Shop');
      }

      public function productable()
      {
        return $this->morphTo();
      }
    }

    class Event extends Model
    {
      public function product()
      {
        return $this->morphOne('App\Product', 'productable');
      }
    }

现在,我不确定您为什么要尝试创建一个空事件并将其添加到所有产品中,但如果您想针对任何用例执行此操作...请遵循以下方法...:)

$shop = Shop::first();            //or $shop = Shop::find(1);

foreach($shop->products as $product) {
  $event = Event::create([]);
  $service = Service::create([]);

  $product->productable()->saveMany([
    $event, $service
  ]);
}

如果有什么不起作用,请在下面的评论中告诉我:)

-- Edit

首先请您理解,您无法添加条目productable_id or productable_type from a hasMany()关系。您需要确保您使用的是morph出于此类目的的关系。

其次,由于您尝试首先添加产品而不是事件,因此插入方法不适合您。请注意,您必须尝试创建一个活动或服务优先然后尝试与商店建立联系。

最简单的方法是

$shop = Shop::first();

$event = Event::create(['title' => 'Some Event']);
$event->product()->create(['shop_id' => $shop->id]);

$service = Service::create(['title' => 'Some Service']);
$service->product()->create(['shop_id' => $shop->id]);

您也可以尝试遵循我的第一种方法,但我刚才提到的方法绝对应该有效......实际上这就是插入/创建它的方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 变形关系 的相关文章

  • Woocommerce 让产品显示在存档页面中

    我正在尝试让所有产品显示在我商店的存档页面中 我想知道他们的id我正在使用我的一个钩子 它在 wp head 上运行并检查 if is product category 我想以某种方式访问 产品的查询并获取它们的 ID if is prod
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • 将“php”作为 shell 脚本执行时的自定义 php.ini 文件

    我在跑php作为 shell 脚本 我不确定 shell脚本 是否正确 该文件以 usr bin php 这很好用 但 MongoDB 类没有正确加载php ini文件 具有extension mongo so 未使用 我该如何使用它tha
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • 交换关联数组中的两个项目

    Example arr array apple gt sweet grapefruit gt bitter pear gt tasty banana gt yellow 我想调换一下柚子和梨的位置 这样数组就变成了 arr array ap
  • 如何使用 BigQuery 有效地选择另一个表中匹配子字符串的记录?

    我有一个包含数百万个字符串的表 我想将其与包含大约两万个字符串的表进行匹配 如下所示 standardSQL SELECT record FROM record JOIN fragment ON record name LIKE CONCA
  • PHP 在输入流中使用 fwrite 和 fread

    我正在寻找将 PHP 输入流的内容写入磁盘的最有效方法 而不使用授予 PHP 脚本的大量内存 例如 如果可以上传的最大文件大小为 1 GB 但 PHP 只有 32 MB 内存 define MAX FILE LEN 1073741824 1
  • 在 PHP 中撤销 Google 访问令牌

    正如标题所示 我想以编程方式撤销授予的访问令牌 即在 PHP 中 我发现这个他们的网站 https developers google com identity protocols OAuth2WebServer tokenrevoke 但
  • PHP 脚本可以在终端中运行,但不能在浏览器中运行

    我正在尝试执行exec命令 但我遇到了问题 当我运行以下代码时 当我通过浏览器运行它时它不起作用 但如果我把输出 str将其复制并粘贴到终端中 它工作得很好 造成这种情况的原因是什么 我该如何解决 目前我正在运行localhost php
  • jQuery Mobile 表单验证

    我有一个移动网站 除了验证之外一切都工作正常 基本上我希望从用户那里获取值 然后在单独的页面 process php 上处理它们 但是 在这样做之前 我需要检查以确保字段已填充 我已经研究了几种方法来做到这一点 但似乎没有一种有效 我现在有
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • CURL 中的 data-urlencode 是什么意思?

    我搜索了很多个小时试图弄清楚 php curl 中的 data urlencode 是什么 我尝试过这个 但我认为这是不对的 xmlpost object1 file https www lob com goblue pdf 在文档中是 d
  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • 使用正则表达式提取两个短语之间的所有单词[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下正则表达式提取两个短语之间的所有单词 b item W w W 0 2 1 one W w W 0 3 business b b item W w W 0 2 3 three W w W 0 3
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一
  • 为什么 Composer 降级了我的包?

    php composer phar update这样做了 删除了 2 3 0 软件包并安装了整个 2 2 5 Zend Framework php composer phar update Loading composer reposito
  • Magento - 自定义支付模块

    这是一个非常普遍的问题 但这里是 我正在尝试在 Magento 中创建一个自定义支付模块 我创建了一个 常规 模块 可以连接到 Magento 事件 观察者模型 但是我如何告诉 Magento 将模块视为支付模块 以便它显示在管理后端和结账
  • SQL 更新 - 更新选定的行

    我正在使用 SQL Server 2008 我有一个名为MYTABLE有两列 ID STATUS 我想编写一个存储过程来返回其记录STATUS是 0 但是这个存储过程必须更新STATUS返回行数为 1 如何在单个查询中执行此选择和更新操作

随机推荐

  • 将 pandas 数据帧作为压缩的 CSV 直接写入 Amazon s3 存储桶?

    我目前有一个脚本 可以读取保存到 s3 的现有 csv 版本 将其与 pandas 数据框中的新行组合起来 然后直接写回 s3 try csv prev content str s3 resource Object bucket name
  • 如何使用 Angular 4 从父级获取子 DOM 元素引用

    我需要使用 Angular 4 从父组件获取子组件 DOM 引用 但我无法访问子组件 DOM 请指导我如何实现这一点 父组件 html
  • 字符串包含列表的所有元素

    我正在转向 Python 并且对 Pythonic 方法还比较陌生 我想编写一个函数 它接受一个字符串和一个列表 如果列表中的所有元素都出现在字符串中 则返回 true 这看起来相当简单 然而 我面临着一些困难 代码是这样的 def myf
  • 按值对 Html Select 选项进行排序,同时保留当前所选项目的最有效方法是什么?

    我有 jQuery 但我不确定它是否有任何内置的排序助手 我可以制作每个项目的二维数组text value and selected属性 但我不认为 javascript 是内置的Array sort 会正常工作 将选项提取到临时数组中 排
  • 使用 Jersey 的 JAX-RS 的休眠资源类中具有连接表的多对一

    我正在使用 Jersey 实现 RESTful Web 服务 我使用 hibernate 与数据库 mySQL 进行通信 我的休眠资源类包括 Entity public class Activity Id GeneratedValue pr
  • JAXB2:将嵌套元素映射到同一个 Java 类中

    我在尝试将嵌套元素映射到同一个 Java 类时遇到问题 XML 我在这里想做的是设置id属性和text元素进入SlideText class
  • 从 CMAKE 调用 MIDL 编译器

    我将使用 CMAKE 的 MIDL 编译器 但无法从 CmakeList 调用 MIDL 编译器 这是我用来实现我的目标的命令 add custom command OUTPUT CMAKE CURRENT BINARY DIR IFace
  • 哪个查询更好、更高效 - mysql

    我遇到以不同的方式编写查询 如下所示Type I SELECT JS JobseekerID JS FirstName JS LastName JS Currency JS AccountRegDate JS LastUpdated JS
  • 使用 PHP 和 MySQL 显示日语字符的问题

    我正在使用 PHP 连接到 MySQL 数据库来创建 XML 文件 除了字符编码之外 一切正常 我需要日语和英语字符 所以显然我选择使用 UTF 8 唯一的问题是数据库中的日语字符无法正确显示 数据库和表的排序规则设置为 UTF8 gene
  • 在 Mac OS X 上的 64 位进程中,中等大小的内存分配怎么会失败?

    我正在构建一个相册布局应用程序 该应用程序经常将 JPEG 图像解压缩到内存中的位图缓冲区中 图像的大小限制为 100 兆像素 但通常不超过 15 兆像素 有时这些缓冲区的内存分配会失败 NSMutableData alloc initWi
  • 如何从c#发送邮件

    我有代码 System Web Mail MailMessage oMailMessage new MailMessage oMailMessage From strFromEmaild oMailMessage To strToEmail
  • 传单:添加指向标记的链接

    非常简单的问题 如何使 Leaflet 中的地图标记可点击并将用户路由到其他页面 每个标记都有自己的页面 我尝试了以下方法但没有成功 不知何故 所有标记都指向同一页面 即最后分配的 URI var markers coords 51 505
  • 在 Python 中加速矩阵向量乘法和求幂,可能通过调用 C/C++

    我目前正在研究一个机器学习项目 其中 给定一个数据矩阵Z和一个向量rho 我必须计算的值和斜率逻辑损失函数 at rho 计算涉及基本的矩阵向量乘法和 log exp 运算 并采用避免数值溢出的技巧 在本节中进行了描述 上一篇文章 我目前正
  • 如何分配或返回受联合约束的通用 T?

    换句话说 如何为联合类型集中的不同类型实现特定于类型的解决方案 鉴于以下代码 type FieldType interface string int type Field T FieldType struct name string def
  • 无需刷新页面即可更改 HTML 代码

    有没有可能how to change HTML jsp 页面without refreshing it 用例是用户向文本区域写入一些内容 然后点击某个按钮 然后我需要将一些对象 即图片 添加到页面中先前定义的位置 gt 我需要更改 HTML
  • Opencv虚拟相机旋转/平移以获得鸟瞰图

    我有一个校准过的相机 我确切地知道内部和外部数据 相机的高度也是已知的 现在我想虚拟地旋转相机以获得鸟瞰图 这样我就可以用三个旋转角度和平移来构建单应性矩阵 我知道 2 个点可以通过单应性从一张图像转换为另一张图像 x K R t n d
  • .Rprofile 未来源

    我试图在 Rprofile 脚本中为 blogdown 包设置一些全局选项 但它们没有被获取 Rprofile 脚本如下所示 options blogdown ext Rmd blogdown author Maryam Khezrzade
  • INSERT AFTER 或 UPDATE AFTER 触发器内的回滚是否会回滚整个事务

    INSERT AFTER 或 UPDATE AFTER 触发器内的回滚是否回滚整个事务或仅回滚作为触发器原因的当前行 这与 Commit 相同吗 我尝试通过当前使用 MSTDC 进行事务的项目代码进行检查 看起来好像整个事务已中止 如果触发
  • 语义网框架

    有哪些语义 Web 框架 每个框架有哪些优点 缺点 我已经广泛使用了Jena 我看过Sesame简要地 还有其他我应该考虑的吗 Redland是一个很好的RDF框架 就像Andreas说的 我主要使用它的 Python 绑定 并通过 Mac
  • Laravel 变形关系

    我有一个关于在 Laravel 中保存多态关系的问题 这是我想在 laravel 中创建的模型 商店有很多产品 产品可以是 商品 活动 或 服务 我有以下表格 shops id user id name events id public t