whereraw query multiple form dates php sql join builder sqlbuilder

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




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 ();

Descárguelo de github


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