第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Laravel 加載關(guān)系 - 框架錯(cuò)誤?

Laravel 加載關(guān)系 - 框架錯(cuò)誤?

PHP
眼眸繁星 2023-08-11 11:06:38
我遇到了一些奇怪的事情,我認(rèn)為這可能是框架本身的錯(cuò)誤,所以我想知道是否有類似的經(jīng)歷。我有兩個(gè)實(shí)體:Contact和Media處于 1:M 關(guān)系。關(guān)系定義為:public function media(){    return $this->hasMany(Media::class);}現(xiàn)在我看到的問題是,當(dāng)我繼續(xù)show控制器方法并加載關(guān)系時(shí),如下所示:public function show(Contact $contact){    $contact->load('media');    return response()->json($contact);}聯(lián)系方式已解決,媒體關(guān)系如下:"first_name": "Melisa",..."media": [    {        "id": 50,    ...但是,如果我修改關(guān)系的大小寫,以便我調(diào)用:public function show(Contact $contact){    $contact->load('mEdIa');    return response()->json($contact);}它返回:"first_name": "Melisa",..."m_ed_ia": [    {        "id": 50,    ...……這確實(shí)令人不安。它應(yīng)該發(fā)生嗎?
查看完整描述

2 回答

?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

這種行為應(yīng)該在 Laravel 的文檔中注明,事實(shí)并非如此。如果我是你,我會(huì)提出一個(gè)關(guān)于更新有關(guān)此行為的文檔的問題,并看看會(huì)有什么反應(yīng)。


但事實(shí)上,這是一個(gè)功能,而不是一個(gè)錯(cuò)誤。


PHP 的本質(zhì)在很多方面都是敏感和不敏感的。對(duì)于類和方法;PHP 是不敏感的。


class Contact {

    public function media() {

        return .. relationship;

    }

}


// valid

new CONTACT();

(new contact())->mediA();

// valid reflection

$r = \ReflectionClass('contact');

$r->hasMethod('mediA'); // true

所以這些奇怪的東西都是有效的?,F(xiàn)在到你說的這一點(diǎn):

..從我的角度來看mEdia不應(yīng)該被允許。我的關(guān)系函數(shù)名稱是media,我希望它被這樣使用。

那么你必須這樣寫。你必須這樣做,因?yàn)?Laravel 依賴于它。

  • PHP 根本無法驗(yàn)證/驗(yàn)證。

  • Laravel 必須改變編程語言的本質(zhì),其敏感性是通過選擇故意設(shè)計(jì)的。

  • 這里的期望是;您(作為程序員)應(yīng)該了解 PHP 的敏感性,因此在這種情況下,絕對(duì)不需要驗(yàn)證給定的輸入。

  • 驗(yàn)證/驗(yàn)證這樣的事情的開銷將是巨大的并且沒有意義。

$class = 'contact';

$method = 'mediA';


$r = new \ReflectionClass($class);

if($class !== $r->getName()) {

    throw new \Exception('unknown class');

}

if(!in_array($method, array_map(function($method) {

    return $method->name;

}, $methods))) {

    throw new \Exception('unknown method');

}


// valid from here

從各個(gè)角度來看, 的用法$contacts->with('mediA')是完全有效的。


mediA轉(zhuǎn)換為數(shù)組(本身)時(shí)使用medi_a的事實(shí)Str::snake('mediA')只是您必須處理的 Laravel 的一個(gè)功能。


查看完整回答
反對(duì) 回復(fù) 2023-08-11
?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊

Laravel 中有這樣的行為。要獲得相同的密鑰“mEdIa” - 您必須添加到media模型。

public static $snakeAttributes = false;


查看完整回答
反對(duì) 回復(fù) 2023-08-11
  • 2 回答
  • 0 關(guān)注
  • 127 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)