php - multiple - query builder laravel
SQL Builder para PHP, ¿con el soporte JOIN? (10)
Aconsejaría usar un framework PHP como Symfony que usa Propel por defecto y puede usar Doctrine si lo desea.
CakePHP también usa un ORM, pero no sé cuál.
¿Alguno de ustedes conoce una biblioteca que le ayuda a crear / manipular consultas SQL, que admita JOIN?
Le daría mucha flexibilidad, pensaría que si tiene algo en donde puede devolver un objeto, que tiene un conjunto de consultas, y aún así puede aplicar JOIN, subconsultas y demás.
He buscado y he encontrado SQL Builder, que parece muy básico, y no admite combinaciones. Cuál sería una característica principal que realmente lo haría útil.
Recomiendo encarecidamente CakePHP. Crea combinaciones para usted de forma automática, en función de las asociaciones entre tablas.
Di si estuvieras escribiendo un blog:
app/model/post.php:
class Post extends AppModel {
var $hasMany = array(''Comment'');
}
app/controller/posts_controller.php:
function view($id) {
$this->set(''post'', $this->Post->read(null, $id));
}
app/views/posts/view.ctp:
<h2><?php echo $post[''Post''][''title'']?></h2>
<p><?php echo $post[''Post''][''body'']; /* Might want Textile/Markdown here */ ?></p>
<h3>Comments</h3>
<?php foreach($post[''Comment''] as $comment) { ?>
<p><?php echo $comment[''body'']?></p>
<p class="poster"><?php echo $comment[''name'']?></p>
<?php } ?>
Eso sería todo lo que tiene que escribir para ver una publicación de blog, su esquema de base de datos se lee y almacena en caché. Mientras lo mantengas consistente con las convenciones, no tienes que decir nada sobre cómo está configurada tu mesa.
posts:
id INT
body TEXT
created DATETIME
comments:
id INT
body TEXT
name VARCHAR
post_id INT
Tiene adaptadores para admitir MySQL, MSSQL, PostgreSQL, SQLite, Oracle y otros. También puede ajustar los servicios web como modelos e incluso lograr que se una a los datos de su base de datos y a los datos remotos. Es algo muy inteligente.
Espero que esto ayude :)
Tal vez puedas probar un ORM , como Propel o Doctrine , tienen un buen lenguaje de consulta programática y te devuelven matrices de objetos que representan filas en tu base de datos ...
Por ejemplo, con Doctrine puedes hacer uniones así:
$q = Doctrine_Query::create();
$q->from(''User u'')
->leftJoin(''u.Group g'')
->innerJoin(''u.Phonenumber p WITH u.id > 3'')
->leftJoin(''u.Email e'');
$users = $q->execute();
Y con Propel:
$c = new Criteria(AuthorPeer::DATABASE_NAME);
$c->addJoin(AuthorPeer::ID, BookPeer::AUTHOR_ID, Criteria::INNER_JOIN);
$c->addJoin(BookPeer::PUBLISHER_ID, PublisherPeer::ID, Criteria::INNER_JOIN);
$c->add(PublisherPeer::NAME, ''Some Name'');
$authors = AuthorPeer::doSelect($c);
y puedes hacer mucho más con ambos ...
Zend_Db_Select del paquete Zend_Db del Zend Framework puede hacer cosas tales como:
// Build this query:
// SELECT p."product_id", p."product_name", l.*
// FROM "products" AS p JOIN "line_items" AS l
// ON p.product_id = l.product_id
$select = $db->select()
->from(array(''p'' => ''products''), array(''product_id'', ''product_name''))
->join(array(''l'' => ''line_items''), ''p.product_id = l.product_id'');
(del Ejemplo 11.54. Ejemplo del método join () en el Manual de Zend Framework)
Si no desea ejecutar un paquete de ORM en toda regla, este podría ser el camino a seguir.
súper rápido basado en SQLObject IteratorQuery de pastaPHP
itera sobre el recurso
foreach(_from(''users u'')
->columns("up.email_address AS EmailAddress", "u.user_name AS u.UserName")
->left(''userprofiles up'', _eq(''u.id'', _var(''up.id'')))
->where(_and()->add(_eq(''u.is_active'',1)))
->limit(0,10)
->order("UserName")
->execute("myConnection") as $user){
echo sprintf(
''<a href="mailto:%s">%s</a><br/>'',
$user->EmailAdress,
$user->UserName
);
}
Esto parece ser un generador de SQL con soporte de unión compleja: http://laravel.com/docs/queries
FluentPDO se ve bien si ya está usando PDO: http://fluentpdo.com/documentation.html
Uso el generador de consultas de la biblioteca phptoolcase , utiliza el conector pdo y tiene soporte para unirse.
http://phptoolcase.com/guides/ptc-qb-guide.html
Puede usarlo con el administrador de conexiones de la biblioteca para configurar varias conexiones de bases de datos muy rápidamente.
Puedes usar lenkorm es muy fácil:
select (''contents) -> left ('' categories ON categories.category.id = contents.category_id) -> where (''content_id = 1'') -> result ();
o puedes usar como:
select (''contents) -> left ('' categories-> using (categoru_id) -> where (''content_id = 1'') -> result ();
Pruebe magsql https://github.com/maghead/magsql , un generador de SQL diseñado para rendimiento escrito en PHP, viene con soporte de unión y generación de SQL multiplataforma.
Actualmente se usa en el "orbe magneto" de PHP más rápido y puro