Cakephp3 me donne un eBoner(TM)

Forum pour parler de prog. et d'informatique questions/réponses/trucs sont les bienvenus.

Cakephp3 me donne un eBoner(TM)

Messagede Phil » Lun Fév 02, 2015 5:51 am

je sais que personne fait du web ici, mais fallait que j'en parle. CakePHP 3 torche.

Pour fetcher le data de la base de données on peut se faire des custom-finder methods
Code: Tout sélectionner
class ArticlesTable extends Table
{

    public function findPublished(Query $query, array $options)
    {
        $query->where([
            'Articles.published' => true,
            'Articles.moderated' => true
        ]);
        return $query;
    }

}


On les utilise comme ca
Code: Tout sélectionner
$query = $articles->find('published');


Pis on peut les combiner comme ca
Code: Tout sélectionner
$query = $articles->find('published')->find('recent');


:cheers:
Black Label... Criss moué sa sur la tabel
Avatar de l'utilisateur
Phil
Administrator
 
Messages: 11159
Inscription: Jeu Sep 07, 2006 4:33 pm
Localisation: Fleurimont

Re: Cakephp3 me donne un eBoner(TM)

Messagede Domaniak » Lun Fév 02, 2015 10:31 am

Ça ressemble beaucoup à Eloquent et les Models dans Laravel,

Code: Tout sélectionner
class UneClasse extends \Eloquent {

    ...

    public function scopeWithBusiness($query, $idBusiness)
    {
        return $query->where("idParentBusiness", "=", $idBusiness);
    }

    //Lien vers une autre table/Model
    public function uneClasseInvoice()
    {
        return $this->belongsTo("IMD\Data\UneClasseInvoice", "idOfferInvoice");
    }

    //Condition sur une table lié
    public function scopeWithPurchasedBetween($query, $startDate, $endDate)
    {
        return $query->whereHas('uneClasseInvoice', function($q) USE ($startDate, $endDate)
            {
                $q->whereRaw("(paidDate >= '$startDate' AND paidDate <= '$endDate')");
            });
    }

}


$data = UneClasse::withBusiness($this->idBusiness)
            ->withPurchasedBetween($startDate, $endDate)
            ->select(array(...))
            ->groupBy(array("idUneClasse"))
            ->get();
Avatar de l'utilisateur
Domaniak

 
Messages: 287
Inscription: Ven Sep 07, 2007 7:06 pm

Re: Cakephp3 me donne un eBoner(TM)

Messagede Phil » Lun Fév 02, 2015 12:36 pm

ohhhhhh je savais pas quil y avait un bel orm comme ca dans laravel! Ca a l'air d'etre identique, est-ce que c'est comme ca depuis la naissance de laravel? Ca expliquerait ou la crew de cake vont chercher leur inspiration!
Black Label... Criss moué sa sur la tabel
Avatar de l'utilisateur
Phil
Administrator
 
Messages: 11159
Inscription: Jeu Sep 07, 2006 4:33 pm
Localisation: Fleurimont

Re: Cakephp3 me donne un eBoner(TM)

Messagede Domaniak » Lun Fév 02, 2015 2:43 pm

Je sais pas si s'est depuis la version 1, mais ça fait un boute... je connais pas Cakephp, mais Laravel s'est vraiment très hot!
Avatar de l'utilisateur
Domaniak

 
Messages: 287
Inscription: Ven Sep 07, 2007 7:06 pm

Re: Cakephp3 me donne un eBoner(TM)

Messagede Raymond Ouelette » Lun Fév 02, 2015 3:22 pm

Comment il construit les relations? Genre si article a une foreign key sur author, il va chercher l'author automatiquement?
Avatar de l'utilisateur
Raymond Ouelette
tête de crane
 
Messages: 8550
Inscription: Ven Sep 08, 2006 4:47 pm
Localisation: Allo

Re: Cakephp3 me donne un eBoner(TM)

Messagede Domaniak » Lun Fév 02, 2015 5:40 pm

Tu définis tes relation dans le Model,

Code: Tout sélectionner
class User extends Eloquent {

    public function phone()
    {
        return $this->hasOne('Phone');
    }

}

Et après tu peux t'en servir comme ça:

Code: Tout sélectionner
$phone = User::find(1)->phone;


Tu peux aussi définir les clé a utilisé toi même:
Code: Tout sélectionner
return $this->hasOne('Phone', 'foreign_key', 'local_key');


http://laravel.com/docs/4.2/eloquent#relationships

Se qui est hot aussi ce toute se que tu peux faire avec tes relation par après, comme des insert:
Code: Tout sélectionner
$comment = new Comment(array('message' => 'A new comment.'));

$post = Post::find(1);

$comment = $post->comments()->save($comment);

Se qui va attache le comment au post.
Avatar de l'utilisateur
Domaniak

 
Messages: 287
Inscription: Ven Sep 07, 2007 7:06 pm

Re: Cakephp3 me donne un eBoner(TM)

Messagede Phil » Lun Fév 02, 2015 6:56 pm

face de crane Ouelette a écrit:Comment il construit les relations? Genre si article a une foreign key sur author, il va chercher l'author automatiquement?


Oui man, Cake ont genre une philosophie "convention over configuration". Si tu nomme tes tables pis tes key selon la convention, presque tout se fait automatiquement, incluant les associations

Code: Tout sélectionner
$query = $articles->find()->contain([
    'Authors',
    'Comments' => function ($q) {
       return $q->find('approved')->find('popular');
    }
]);


Mais appart ca, c'est comme un autre ORM je crois. Ce que je trouve intéressant c'est vraiment de pouvoir séparer les concepts en "morceaux de queries" pis les recombiner au besoin. Le reste c'est surtout du syntaxic sugar, c'est un orm traditionnel.
Black Label... Criss moué sa sur la tabel
Avatar de l'utilisateur
Phil
Administrator
 
Messages: 11159
Inscription: Jeu Sep 07, 2006 4:33 pm
Localisation: Fleurimont

Re: Cakephp3 me donne un eBoner(TM)

Messagede Phil » Mar Fév 10, 2015 8:56 pm

et tant qu'a parler de web....

ce post la m'a fait rire fort.

Image


je suis facilement amusable.
Black Label... Criss moué sa sur la tabel
Avatar de l'utilisateur
Phil
Administrator
 
Messages: 11159
Inscription: Jeu Sep 07, 2006 4:33 pm
Localisation: Fleurimont

Re: Cakephp3 me donne un eBoner(TM)

Messagede Raymond Ouelette » Mer Fév 11, 2015 11:15 am

Hahaha

J'aime bien ce subreddit -> http://reddit.com/r/programmingcirclejerk
Avatar de l'utilisateur
Raymond Ouelette
tête de crane
 
Messages: 8550
Inscription: Ven Sep 08, 2006 4:47 pm
Localisation: Allo


Retourner vers Programmation et Informatique

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron