Я работаю над REST API с Slim и Eloquent.Я использовал Medoo DB раньше.Это работало хорошо, но я хотел убрать статическую схему и стать более гибким.
У меня есть таблица БД с информацией о продукте.Проблема в том, что у меня есть еще много таблиц с информацией о продукте.Они не используются сами по себе, а только в сочетании с продуктом.
Так что не имеет смысла создавать классы Eloquent Relationship и модель для каждой дополнительной таблицы, потому что они никогда там не будут использоваться.своя.Фактически это одна таблица, распределенная по нескольким таблицам.
Я знаю, что лучше всего было бы изменить структуру БД и создать одну большую таблицу, но я не могу сделать это прямо сейчас.
Итакв 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;
}
}
Можно ли сделать что-то вроде:
$data = $this->find($id)->product_freetext->product_table3->product_table4 ...