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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

PHP
眼眸繁星 2023-08-11 11:06:38
我遇到了一些奇怪的事情,我認為這可能是框架本身的錯誤,所以我想知道是否有類似的經(jīng)歷。我有兩個實體:Contact和Media處于 1:M 關(guān)系。關(guān)系定義為:public function media(){    return $this->hasMany(Media::class);}現(xiàn)在我看到的問題是,當我繼續(xù)show控制器方法并加載關(guān)系時,如下所示: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,    ...……這確實令人不安。它應該發(fā)生嗎?
查看完整描述

2 回答

?
湖上湖

TA貢獻2003條經(jīng)驗 獲得超2個贊

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


但事實上,這是一個功能,而不是一個錯誤。


PHP 的本質(zhì)在很多方面都是敏感和不敏感的。對于類和方法;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)在到你說的這一點:

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

那么你必須這樣寫。你必須這樣做,因為 Laravel 依賴于它。

  • PHP 根本無法驗證/驗證。

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

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

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

$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

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


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


查看完整回答
反對 回復 2023-08-11
?
慕森王

TA貢獻1777條經(jīng)驗 獲得超3個贊

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

public static $snakeAttributes = false;


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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