Hirdetés
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- One mobilszolgáltatások
- Íme az új Android Auto!
- iPhone topik
- Xiaomi 15 - kicsi telefon nagy energiával
- Vivo X200 Pro - a kétszázát!
- Okosóra és okoskiegészítő topik
- Android alkalmazások - szoftver kibeszélő topik
- EarFun Air Pro 4 - a cél a csúcs
- Szívós, szép és kitartó az új OnePlus óra
Új hozzászólás Aktív témák
-
_ak_
addikt
Sziasztok!
Lenne egy gyakorló feladatom, de kicsit akadozik a megfejtése.
Adott egy rendelések xml fájl, és ennek megfelelően kéne relációs táblákat létrehozni MySQL-ben normalizálva és minimalizálva a redundanciát.Az alap táblákig nagyjából világos a helyzet:
Customers
-id
-name
-email
-telephoneProducts
-id
-item_code
-item_cc_code
-item_name
-vtsz
-unit
-unit_price_nettoGondolom, célszerű külön a Shipping és Billing táblákat is létrehozni, pl:
Shipping
-id
-customer_id
-name
-country
-postcode
-city
-street
-telephoneBár ez esetben a HU és a Budapest, már valószínűleg többször szerepelne, szóval esetleg azokat lehetne egy Cities táblába menteni
-id
-country
-post_code
-cityés a shippingn táblába a country helyett city_id lenne.
Ez eddig nagyjából jó?
-
_ak_
addikt
Ezt olvastam már, köszönöm, csak én összemostam a két dolgot.
A Framework külön dolgozik a MySql szervertől.
Foreing_key megadása nélkül is működnek a relációk, persze jelen esetben csak akkor automatikus, ha a megfelelő elnevezéséket használunk.
Továbbá a MyIsam is tudja értelmezni a FK-t, csak a hozzá tartozó megkötéseket nem. Így hiába törlök egy felhasználót, a kutyák gyerek táblán, nem történik semmi változás.
Tehát törléskor külön kéne még egy query a kutya táblában a user_id-re és úgy lehetne törölni a hozzá tartozó kutyákat is.És igaz mi igaz, elég pontatlanul is fogalmaztam. Ebből a szempontból az ORM egy hadik játékos, a lekérdezéseknek csak közvetve van köze a beállított relációkhoz.
Tehát esetemben most, azért kell InnoDB és FK, hogy könnyebb módon törölhessek egy felhasználót kutyástul. Továbbá nem egy eget rengető dolog, de így a megkötések révén, programhiba/akármi esetén sem, tud mondjuk rossz megyéhez kerülni egy település.
Persze az eredeti hibát nem sikerült még kijavítanom, de legalább tudom, hogy valószínűleg az ORM-el kapcsolatos a jelenség és nem konkrétan az adatbázissal van baj.
-
_ak_
addikt
válasz
Speeedfire
#1572
üzenetére
Ez így már világosabb akkor, köszi!
Viszont az továbbra is rejtély, hogy miért nem működik az admin ellenőrzés, máshol is van még egy-egy ilyen if, igaz nem a controllerben, de hasonló a funkció és hibátlanul működik:
@if($dog->user_id === Auth::id())
Ránézésre a host és a vagrant box-om közti különbség a MySQL verziója 5.1-5.5 és tároló motor, de hoston az a két if nem igazán működik úgy, ahogy kéne.
-
_ak_
addikt
válasz
Speeedfire
#1570
üzenetére
Na de nem pont az a lényege az ORM használatának, hogy előredefiniált táblarelációk vannak az idegen kulcsokon keresztül? Máskülönben hogyan határozódik meg a reláció?
Ezt félretéve nagyjából értem amit mondasz, amennyiben a úgy érthetem, hogy a relációk az alkalmazáson belül kerülnek beállításra és az InnoDB motornak pedig sebességi előnye lesz, ha megadjuk, hogy melyek az idegen kulcsok egy másik táblából.
Nem akarok hülyeséget kérdezni, nem hogy írni, csak azt hittem, hogy ha nincsen meghatározva az idegen kulcs, akkor az ORM használatát is bukom.
-
_ak_
addikt
Számomra egy kicsit furcsa helyzet előtt állok.
Van egy webalkalmazásom, aminek a fejlesztése közben MySQL-t és InnoDB-t használtam. A tábláim többségében van idegen kulcs, ami(k) segítségével van meghatározva az egyes táblák közti reláció.
Ezt az adatbázist szőröstül-bőröstül exportáltam, majd importáltam egy MyISAM motorral működő MySQL-be és szinte minden ugyan úgy működik.
Nem értem, hogy miért és hogyan. A MyISAM nem támogatja az idegen kulcsokat, az egymáshoz fűződő adatokat mégis le tudom kérni.
Kicsit tartok attól, hogy olyan a helyzet, mint matekban, amikor rossz számolás után jó eredmény jön ki,...legalább 2-szer hibáztam.A dolog egyébként úgy tűnt fel, hogy kettő if-em hibásan fut le:
if (Auth::user()->admin === 1)
{
return Redirect::route('admin.index');
} else..., illetve
if ($id === Auth::id() or Auth::user()->admin === 1)
Mindkettő esetében az admin rész mindig false.
Kaphatnék ebben egy kis felvilágosítást?
-
_ak_
addikt
válasz
Speeedfire
#1559
üzenetére
Parancsolj:
(SQL:
select count(*) as aggregate from `dogs` where `gender` = szuka
or
(select count(*) from `dog_breeds` where `dogs`.`dog_breed_id` = `dog_breeds`.`id` and `dog_breed` LIKE %szuka%) >= 1
or
(select count(*) from `counties` where `dogs`.`county_id` = `counties`.`id` and `county` LIKE %szuka%) >= 1
or
(select count(*) from `settlements` where `dogs`.`settlement_id` = `settlements`.`id` and `settlement` LIKE %szuka%) >= 1
)martonx: De még mennyire, hogy hasznos. Noha a Laravel dokumentációban nem túl erős, ezt párosítva a tapasztalatlanságommal, sokszor, ha előttem van vmi, akkor sem vagyok benne biztos, hogy az az amit keresek, lásd a fenti helyzetet. Eloquent query alatt ez is ott van, de egyszerűen túlmentem rajta, amíg nem találtam egy könnyen érthető példát a neten.
Ebben szerencsére jók, a hypenak köszönhetően nagyon sok talált van, csak tudjam, hogy mit is akarok pontosan.
-
_ak_
addikt
Azt hiszem sikerült az eredeti elképzelésem.
'whereHas' kellett neki:
$dogs = Dog::where('gender', '=', "$search")
->orWhereHas('dogBreed', function ($query) use ($search)
{
$query->where('dog_breed', 'LIKE', "%$search%");
})
->orWhereHas('county', function ($query) use ($search)
{
$query->where('county', 'LIKE', "%$search%");
})
->orWhereHas('settlement', function ($query) use ($search)
{
$query->where('settlement', 'LIKE', "%$search%");
})
->get();Nem hittem volna, hogy ennyit fogok elidőzni már az elején.
![;]](//cdn.rios.hu/dl/s/v1.gif)
-
_ak_
addikt
válasz
Speeedfire
#1555
üzenetére
Úgy tűnik, hogy szépen elakadtam.
Félig meddig sikerült valamit összehoznom, viszont azzal együtt jött vmi tábla ütközés, mert fals értékek jelentek meg. Itt az első postomban leírtam, hogy mi volt az ami látszólagosan működött.
Amúgy a model relációim működnek, szóval le tudom kérdezni a kutya fajtát vagy a hozzátartozó települést egy egyszerű '$dog->dog_breed'-el, ill. a kutyák táblában is tudok keresni 'LIKE'-al, de ilyen keresést nem tudok kiterjeszteni a hozzátartozó táblákra.
Most nekifutok még egyszer joinnak, hátha frissebb fejjel más lesz az eredmény.
És közben most kaptam egy tippet, hogy scope query-t is nézzem meg, ill. az eager loadingot.
-
_ak_
addikt
válasz
Speeedfire
#1553
üzenetére
Valami összejött, de felvetett jó pár kérdést.
Elsőnek engem a sorrendiség zavart meg. Mivel a kutyák táblám tartalmaz minden infót vagy inkább kapcsolódó 'id'-t, ezért azt hittem, hogy a kutya táblához kell hozzákötni a többit, de most a 'users' táblához kötöttem a 'dogs' táblát, méghozzá a 'user.id', '=', 'dogs.user_id'.
Meg is kapom szépen a keresett infókat. Igen ám, de van még 'county, settlements,dog_breeds' táblám is, ezeket már nem tudom, így hozzákötni a 'users' táblámhoz. Szóval nem működhet ez valahogy visszafelé is?
Mindenesetre még túrom a Laravel doc.-ot, mert 2 dolog is feltűnt. A fenti DB queryt használva másképp kapom meg az adatokat, mint a Laraveles Eloquent-tel.
Eloquenttel a kapott eredmény:
Dog:with('county', 'settlement')->get(); eredménye:
id:
breed:
county_id:
settlement_id (és folytatásként külön tömbben a 'county', majd megint különben a 'settlement'
id:
county:
.
.
.Míg a DB query join után egyben volt minden, tehát tényleg, mintha egy táblából olvastam ki volna mindent.
-
_ak_
addikt
Sziasztok!
Laravel-ben szeretnék egy kereső mezőt létrehozni, amibe a beírt szöveg(részlet)nek megfelelően, visszakapok egy tömböt.
Tehát mondjuk, ha beírom, hogy kan, akkor adja vissza az összes 'kan' nemű kutyát, meg azokat is amik pl. Kaskantyú-n vannak.
Hogy szokás egy ilyen keresést kivitelezni?
Az adatbázisok közötti reláció be van állítva és le tudom hívni az összes egymáshoz tartozó információt, de nem tudom, hogy hogyan kereshetnék a hozzátartozó adatbázisban. A kutyák táblába a pl. a megye táblára csak a megye azonosítója szerepel
Eddig ilyesmivel próbálkoztam, de mivel nincsen county mező a kutya táblámon ezért ez így nem működik.
$dogs = Dog::with('county')
->where('gender', 'LIKE', "%$search%")
->orWhere('county', 'LIKE', "%$search%")
->paginate(8);Feltételezem, hogy valami JOIN kéne nekem, de egyszerűen most nem tudom megérteni annak a működését.
Irányba tudna valaki állítani?

Így hirtelen azt hiszem, hogy kereshetnék külön külön is a táblákban, de végeredménybe én azt szeretném, hogy minden egy tömbben legyen tovább adta a View-nak.
Új hozzászólás Aktív témák
- Arc Raiders
- Hardcore café
- A fociról könnyedén, egy baráti társaságban
- TCL LCD és LED TV-k
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Kerékpárosok, bringások ide!
- ZolaMan: NerdQAxe++ 4.8TH/s SHA256 BTC Miner Modding
- AMD Navi Radeon™ RX 9xxx sorozat
- One mobilszolgáltatások
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- További aktív témák...
- HIBÁTLAN iPhone 14 Pro 256GB Space Black -1 ÉV GARANCIA -Kártyafüggetlen, MS3235
- LENOVO Legion Pro 5 16IRX8 - 16" WQXGA 240Hz - i5-13500HX - 16GB - 1TB - RTX 4060 - 9 Hó garancia
- S. Mario PC! Hogy fusson a Super Mario! I5 14400F / RX 6900XT 16GB / 32GB DDR5 / 1TB SSD
- BESZÁMÍTÁS! ASUS ROG Strix RTX 2080Ti 11GB videokártya garanciával hibátlan működéssel
- Fujitsu Lifebook A3510 Laptop
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő

![;]](http://cdn.rios.hu/dl/s/v1.gif)



