使用多个表组合成一个的 Laravel Evient 模型 ( 无单独模型 )

我正在研究一种 Slim 和 E枇杷的 REST API 。 我以前用过美杜DB 。 它工作得很好 , 但我想删除静态架构并变得更灵活。

我有一个包含产品信息的数据库表。 问题是我有更多关于产品信息的表格。 它们并不是自己使用的 , 而是与产品结合使用的。

因此 , 为每个子表创建 E枇杷关系类和模型是没有意义的 , 因为它们永远不会单独使用。 它实际上是一个扩展到多个表的表。

我知道最好的办法是改变 DB 的结构并创建一个大表 , 但我现在不能这么做。

因此 , 在 Medoo i 中定义了一个架构结构 , 包含所有可连接的表和选择一个有效产品的查询。 就像我说的 , 我想保持灵活性 , 不要定义代码中的模式 , 但目前我只能从主表中选择数据。

这里只有产品模型 :

<?php
namespace Product\Models;

use Interop\Container\ContainerInterface;
#use Medoo\Medoo;
use \Illuminate\Database\Query\Builder;
use \Illuminate\Database\Eloquent\Model as Model;
use \Illuminate\Database\Capsule\Manager;

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;


class Object extends Model
{
    protected $database;

    public function __construct($database)
    {           
        $this->setTable('product_objects');
        $this->database = $database;
    }

    public function getObjectById($id) {

        /*       
        $data = $this->database
            ->table('product_objects')
            ->get($columns)
            ->first()
            ;
        */

        $data = $this->find($id); // this works (with one table)


        // Throw error if no result found.
        if (empty($data)) {
            throw new \Exception('No object found', 400);
        }        

        return $data;
    }
}

// this was just a test
class Freetext extends Model
{
    protected $database;

    public function __construct($database)
    {           
        $this->setTable('product_freetext');
        $this->database = $database;
    }
}

有没有可能做这样的事情 :

$data = $this->find($id)->product_freetext->product_table3->product_table4 ...

EN From: Laravel Eloquent Model using multiple tables combined into one (no separate models)

3 Comments

  1. 在我看来 , 创建额外的类和添加关系实际上是有意义的 , 因为这些表是真实存在的 , 它们与 Products 表相关。
  2. 到目前为止 , 我通过插入与其他表连接的作用域方法解决了这个问题。 或许有人有更好的办法 ?

    public function scopeObjects($query) {
      return $query->join('product_freetext', 'product_freetext.oid', '=', 'product_objects.id');
    }
    

    后来

    $data = $this->objects()->find($id);
    
  3. 额外的表格只是额外的信息。 他们永远不会被称为自己 , 没有主产品表就没有意义。

More articles:

  • 无法使用 Evient 删除 Laravel 中的模型
  • 使用 Laravel Eliquent 查询具有相同属性的最少量相关模型
  • 如何分割一个用户模型查询
  • 相同的前两次关键时间指一个模型
  • Laravel 5.6 : 如何使用一个文件夹中的所有模型
  • 如何通过单击下一个按钮 , 使用角js 将不同数据进入 laravel 的同一页
  • SAS Macro - 将多个表组合成一个表 , 由另一个表控制
  • 如何使用 common Trait 为所有模型在 laravel 实现雄辩的事件
  • 拉拉沃尔·艾维茨 : 如何排序相关模型的结果 ?
  • 在 Laravel 3l 中 , 我想从一个有很多关系的人那里得到使用 Evolent 的结果
  • 通过它获取另一个表的字符串
  • 如何使用 Laravel 的 fakers 为相关模型生成 / 创建多个记录 ?
  • 为什么不删除拉拉威尔模型 ?
  • 连接 Laravel 的数据库字段和模型属性
  • 如何在 laravel 中使用雄辩的查询防止表上的重复名称
  • 是否有一个统一插件可以让您使用网络摄像头生成一个 3d 模型 ?
  • 我有两个模型消息和 messageto , 我正在使用 message 中的 message model 属性来形成一个页面 , 如何验证这些属性
  • 拉勒维尔访问归属者模型有很多关系
  • 使用模型 ID 作为另一个字段的默认
  • Laravel 4, 如何防止 Eliquent 模型处理某些属性?
  • 使用 E枇杷加入 Laravel 4
  • 如何添加自定义自动增量主键 Laravel 的模型
  • 在一个窗体向导中使用两个模型
  • 是否有可能从 Laravel4 中的一个控制器的单一函数访问两个模型 ?
  • Laravel 5.3 - 保存后无法检索模型 ID
  • 拉拉瓦尔使用了很多对很多关系
  • 如何访问模型与条件有很多关系?
  • 当我使用带有前马赫循环的窗体时 ,"缺少路径所需参数"
  • 如何在 Laravel 5.2 中得到一个控制器功能模型?
  • 在拉勒维尔创造一个链状的方法