Jump to content
php.lv forumi
mypoint

Cik daudzi no jums lieto?

Recommended Posts

> Ērtāk un pārskatāmāk uzrakstīt vaicājumu. :) Personīgi mans viedoklis.

 

`SELECT * FROM `users` WHERE id = 9999`

 

`User(9999)`

 

Nūū...

Share this post


Link to post
Share on other sites

izskatās, kaut kas līdzīg prepared statements , bet nu esmu tik zaļš, ka iespējams pat kļūdos :D

Share this post


Link to post
Share on other sites

> Iedomājies, korpolapa ar kontaktu formu, atsauksmēm un jaunumiem kas sastāv no 5 kverijiem uz full-blown orma PDO un noskeilota uz mākoņa.

 

Neredzu problēmu nelietot ORM. Tieši šāda tipa lapai pati performance būs visnesvarīgākā, tā kā...

Neredzu nepieciešamību piedirst lapu ar lietām, kas tur vienalga nav vajadzīgas. Tu taču netaisi savu blogu uz 11G, ne? :)

ORM un MySQL nav salīdzināms.

 

ORM ir datubāzes menedžēšana ar objektiem. Attiecīgi, klase ir tabula, bet klases instance — ieraksts. Tas ļauj nerakstīt SQL pašam (to izdara pats ORM), bet nedaudz (daudz? tā jau ir cita diskusija) cieš kopējā performance. ORM var būt vairāki bakendi, piemēram, MySQL, PostgreSQL, SQLite... pat NoSQL, kā MongoDB.

 

Re kur pats pseido-kods, kā varētu izskatīties strādāšana ar ORM:

 

~~~

user = User.create("daGrevis", "phpsux")

article = Artice()

article.user = user

article.title = "PHP Sux"

article.content = "This is article tries to say that PHP sux."

article.save()

print article.pk # 1

# Lets request the same article again.

article_copy = Article.get(article.pk)

article_copy.delete()

Article.delete_all()

print Article.count() # 0

for user in User.all():

print article.signature

# PHP Sux

# PHP Sux even more

# PHP is the most suxy, suxy thing

~~~

Patiesībā jau ORM doma ir ORM nosaukumā - Object-relational mapping. Tas nav gluži tik vien kā primitīvs CRUD.

Un man labāk patiktos -

 

<?php
$user = new Users('daGrevis','tusux');
$user->loadRelated('user_images','user_data');
echo $user->profile_picture;

$article = (new Articles)->user($user)->title('tusux')->content('This article tries to say, that You sux')->save();
echo $article;

//Articles::getOne($article->id)->delete();
Articles::delete($article->id);

Articles::purge();
echo Articles::count;

Users::getAll()->each(function($article){
echo $article->signature;    
});

echo 'Problem?';

Edited by F3llony

Share this post


Link to post
Share on other sites

DaGrevis, lietojums nesastāv tikai no tik vienkāršiem vaicājumiem. :) Pat ja arī tā būtu ar pārskatāmību es domāju to, ka vaicājumu redz ļoti tuvu tam kāds tas tiks izpildīts. Pat tādā piemērā kā Tu parādīji man labāk, lai es redzu reālu vaicājumu, kāds tas būs. Teiksim ja Tu būtu pierakstījis tikai to daļu 'User(9999)', es nekādi nesaprastu ka vaicājums pieprasa visus lauciņus priekš lietotāja ar id 9999, toties no sql vaicājuma es to zinu.

Share this post


Link to post
Share on other sites

DaGrevis, lietojums nesastāv tikai no tik vienkāršiem vaicājumiem. :) Pat ja arī tā būtu ar pārskatāmību es domāju to, ka vaicājumu redz ļoti tuvu tam kāds tas tiks izpildīts. Pat tādā piemērā kā Tu parādīji man labāk, lai es redzu reālu vaicājumu, kāds tas būs. Teiksim ja Tu būtu pierakstījis tikai to daļu 'User(9999)', es nekādi nesaprastu ka vaicājums pieprasa visus lauciņus priekš lietotāja ar id 9999, toties no sql vaicājuma es to zinu.

ORMā SQL vienmēr pieprasa "visus lauciņus". Neesmu vēl sastapies ar gadījumu, kad objektā tiktu ielādēta tikai kaut kāda daļa. :)

Share this post


Link to post
Share on other sites

Neiešu strīdēties, jo neesmu viņus izmantojis, bet ja tā ir, tas ir vēl viens trūkums. Piemēram, ja ir tabulā 30 - 50 lauciņi un man vajag tikai lietotāja vārdu, vai es varētu kaut kā izgūt tikai vārdus, nevis visu tabulu, īpaši ja ir tūkstošiem rindiņu?

Share this post


Link to post
Share on other sites

Neiešu strīdēties, jo neesmu viņus izmantojis, bet ja tā ir, tas ir vēl viens trūkums. Piemēram, ja ir tabulā 30 - 50 lauciņi un man vajag tikai lietotāja vārdu, vai es varētu kaut kā izgūt tikai vārdus, nevis visu tabulu, īpaši ja ir tūkstošiem rindiņu?

Parasti tādos gadījumos lieto ORM paplašināšanu ar custom metodēm - funkcija, kura saņem tikai lietotājvārdu tiek piekabināta modelim un saņem kaut kādu id argumentu, piemēram.

Share this post


Link to post
Share on other sites

Nu skaidrs. Nu nezinu, pagaidām palikšu pie vaicājumiem, iespējams kaut kad vajadzēs izpētīt kādu ORM.

Edited by Maris-S

Share this post


Link to post
Share on other sites

Dēļ dažadiem battliem, kas notiek, gan šeit php.lv/f gan arī notepadā.. man pat rodas interese biežāk iekāpt lapā un paskatīties vai kas jauns nav parādījies.

@briedis - paskatīsimies

Share this post


Link to post
Share on other sites

ORM ir jēga izmantot tad, ja realizē biznesa funkcionalitāti. Vienveidīgā, īsā un īstermiņa projektā tas neatmaksājas! Tāpat kā formu ģenerēšana. Tas viss iegūst nozīmi liela apjoma darbos, kad, piemēram, ORM, formas u.c. standartizētas lietas vienkāršo sastrādāšanos starp vairākiem cilvēkiem. Iedomājieties, ka jums jāizveido projekts ar 1000 dažādiem admin skatiem, kur visiem ir nepieciešamas standarta lietas - saraksta šķirstīšana, kārtošana, filtrēšana, meklēšana, ierakstu CRUD (Create, Read, Update, Delete)... Izmantojot ORM tas viss notiek automatizēti. Protams, ja jāveido viena nabadzīga lapa ar trim tabulām un divām funkcijām, par ORM pat nav jēga domāt.

 

Neiešu strīdēties, jo neesmu viņus izmantojis, bet ja tā ir, tas ir vēl viens trūkums. Piemēram, ja ir tabulā 30 - 50 lauciņi un man vajag tikai lietotāja vārdu, vai es varētu kaut kā izgūt tikai vārdus, nevis visu tabulu, īpaši ja ir tūkstošiem rindiņu?

 

ORM - Object Relational Mapping. Bet tev te nevajag mappingu, te vajag metodi, kas atgriež vārdus. Piemēram, Model_User::getListOfNames(), kuras mērķis būs iekapsulēt SQL ($db->query("SELECT name FROM ...")) vai DB konstrukciju, kas pieprasījumu veido ar DB klases metodēm ($select->from('name')->order('name')...), vai cits variants (cache priekšpārbaude, piemēram).

 

ORM un PDO abstrakcija nav gluži viens un tas pats!

Edited by Mr.Key

Share this post


Link to post
Share on other sites

Priekš PHP - php.net/oci8 (legacy oracle databases mast dai) xor php.net/pdo

Priekš Py - SQLAlchemy xor Django ORM

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...