亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Laravel 加載關系 - 框架錯誤?

Laravel 加載關系 - 框架錯誤?

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

2 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

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


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


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


class Contact {

    public function media() {

        return .. relationship;

    }

}


// valid

new CONTACT();

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

// valid reflection

$r = \ReflectionClass('contact');

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

所以這些奇怪的東西都是有效的。現在到你說的這一點:

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

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

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

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

  • 這里的期望是;您(作為程序員)應該了解 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轉換為數組(本身)時使用medi_a的事實Str::snake('mediA')只是您必須處理的 Laravel 的一個功能。


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

TA貢獻1777條經驗 獲得超3個贊

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

public static $snakeAttributes = false;


查看完整回答
反對 回復 2023-08-11
  • 2 回答
  • 0 關注
  • 130 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號