Laravel 8 多对多关系无效(未抛出错误)

Laravel 8 Many to Many relationship not working (no errors being thrown)

我是 Laravel 的新手,但遇到了一个非常奇怪的问题。

我成功创建了 6 table 的模型和迁移以处理多对多关系。其中一个关系工作正常,我可以通过路由检索数据。然而,另一个只有 returns 一个白屏(没有错误,什么都没有)。网络选项卡响应说:“此请求没有可用的响应数据”- 但我已经三次检查数据库并搜索不同的记录,但它从来没有 returns 任何结果。

我已使信息尽可能简单并遵循所有命名约定。

知道这里发生了什么吗?是不是配置有问题?请帮助我不要发疯 - 我已经尝试了大量的代码迭代,但似乎无法建立多对多 client/network 关系。

没有工作关系

客户table:

+----------------+-----------------+------+-----+---------+----------------+
| Field          | Type            | Null | Key | Default | Extra          |
+----------------+-----------------+------+-----+---------+----------------+
| id             | bigint unsigned | NO   | PRI | NULL    | auto_increment |
| client_name    | varchar(255)    | NO   |     | NULL    |                |
| client_type_id | bigint unsigned | YES  |     | NULL    |                |
| address        | varchar(255)    | YES  |     | NULL    |                |
| address_2      | varchar(255)    | YES  |     | NULL    |                |
| city           | varchar(255)    | YES  |     | NULL    |                |
| state          | varchar(255)    | YES  |     | NULL    |                |
| zip_code       | varchar(255)    | YES  |     | NULL    |                |
| country        | varchar(255)    | YES  |     | NULL    |                |
| created_at     | timestamp       | YES  |     | NULL    |                |
| updated_at     | timestamp       | YES  |     | NULL    |                |
+----------------+-----------------+------+-----+---------+----------------+

网络table:

+--------------+-----------------+------+-----+---------+----------------+
| Field        | Type            | Null | Key | Default | Extra          |
+--------------+-----------------+------+-----+---------+----------------+
| id           | bigint unsigned | NO   | PRI | NULL    | auto_increment |
| network_name | varchar(255)    | NO   |     | NULL    |                |
| created_at   | timestamp       | YES  |     | NULL    |                |
| updated_at   | timestamp       | YES  |     | NULL    |                |
+--------------+-----------------+------+-----+---------+----------------+

client_network table:

+------------+-----------------+------+-----+---------+----------------+
| Field      | Type            | Null | Key | Default | Extra          |
+------------+-----------------+------+-----+---------+----------------+
| id         | bigint unsigned | NO   | PRI | NULL    | auto_increment |
| client_id  | bigint unsigned | NO   |     | NULL    |                |
| network_id | bigint unsigned | NO   |     | NULL    |                |
| created_at | timestamp       | YES  |     | NULL    |                |
| updated_at | timestamp       | YES  |     | NULL    |                |
+------------+-----------------+------+-----+---------+----------------+

客户端模型:

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Client extends Model
{
    use HasFactory;

    public function networks()
    {
        return $this->belongsToMany(Network::class);
    }
}

网络模型:

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Network extends Model
{
    use HasFactory;

    public function clients()
    {
        return $this->belongsToMany(Client::class);
    }
}

路线:

Route::get('/testclient', function() {
    $network = Client::find(1)->network_name;
    return $network;
});

你打错了,改一下

Route::get('/testclient', function() {
    $network = Client::find(1)->network;
    return $network;
});

Route::get('/testclient', function() {
    $network = Client::find(1)->networks; //Add s
    return $network;
});

对于处理类似问题的任何人来说,这种情况下的问题不是关系,而是从关系中提取数据的路由。

不工作路线

Route::get('/testclient', function() {
    $network = Client::find(1)->network_name;
    return $network;
});

工作路线

Route::get('/testing', function(){

    $networks = Client::find(1)->networks;

    foreach($networks as $network){

        $network_arr[] = $network->network_name;

    }

    return $network_arr;

为了解决这个问题,评论中建议的代码有助于显示数据确实是从关系中提取的,但显示不正确。

帮助代码:

dd(Network::find(1)->clients);