Php Laravel雄辩模型,使用多个表组合成一个表(没有单独的模型)

Php Laravel雄辩模型,使用多个表组合成一个表(没有单独的模型),php,laravel,orm,eloquent,slim,Php,Laravel,Orm,Eloquent,Slim,我正在使用Slim和Elotent开发RESTAPI。 我以前用过Medoo DB。它工作得很好,但我想删除静态模式并变得更灵活 我有一个包含产品信息的DB表。问题是我有更多的产品信息表。这些不是用于他们自己,而是仅与产品结合使用 因此,为每个子表创建雄辩的关系类和模型是没有意义的,因为它们永远不会单独使用。它实际上是一个表扩展到多个表上 我知道最好的办法是改变数据库结构并创建一个大表,但我现在不能这样做 因此,在Medoo中,我定义了一个模式结构,其中包含所有可连接的表和一个选择一个产品的查询

我正在使用Slim和Elotent开发RESTAPI。 我以前用过Medoo DB。它工作得很好,但我想删除静态模式并变得更灵活

我有一个包含产品信息的DB表。问题是我有更多的产品信息表。这些不是用于他们自己,而是仅与产品结合使用

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

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

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

因此,这里只是产品模型:

<?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;
    }
}

到目前为止,我通过插入一个连接其他表的scope方法解决了这个问题。 也许有人有更好的方法

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

$data = $this->objects()->find($id);

在我看来,创建额外的类和添加关系实际上是有意义的,因为这些表是真实存在的,它们与
产品
表相关。额外的表只是额外的信息。他们从来没有被要求自己,没有主要的产品表没有意义。
$data = $this->objects()->find($id);